1. ホーム
  2. python

[解決済み] Pythonのコンストラクタとデフォルト値 [重複] [重複

2022-05-10 04:06:56

質問

なぜか、下のNodeクラスでは wordListadjacencyList 変数はすべてのNodeのインスタンス間で共有されます。

>>> class Node:
...     def __init__(self, wordList = [], adjacencyList = []):
...         self.wordList = wordList
...         self.adjacencyList = adjacencyList
... 
>>> a = Node()
>>> b = Node()
>>> a.wordList.append("hahaha")
>>> b.wordList
['hahaha']
>>> b.adjacencyList.append("hoho")
>>> a.adjacencyList
['hoho']

コンストラクタのパラメータにデフォルト値 (この場合は空リスト) を使用し続ける方法はありますか? ab を持つようにし、それぞれの wordListadjacencyList という変数があるのですか?

私はpython 3.1.2を使っています。

どのように解決するのですか?

Mutableなデフォルトの引数は、一般にあなたが望むようなことはしません。代わりに、これを試してみてください。

class Node:
     def __init__(self, wordList=None, adjacencyList=None):
        if wordList is None:
            self.wordList = []
        else:
             self.wordList = wordList 
        if adjacencyList is None:
            self.adjacencyList = []
        else:
             self.adjacencyList = adjacencyList