Do Artificial Intelligence Dream of Sheep?

人工知能は羊の夢を見るか?

Python クラス リストの参照が同じになる

インスタンス生成時に integer_list のインスタンスを新たに生成しないと、同じ参照が渡される。

別々 example_class のインスタンスで同一の integer_list を参照してしまう。

class ExampleClass:
integer : int = None
integer_list : list[int] = []

#リストの生成
example_object_list = []
for index in range(0,2) :
example_class = ExampleClass()
#値の設定
example_class.integer = index
example_class.integer_list.append(index)
#リストに追加
example_object_list.append(example_class)

#結果出力
for index,example_class in enumerate(example_object_list):

result = f"""
index :{index}
integer :{example_class.integer}
integer_list:{example_class.integer_list}
"""
print(result)
------------------------

index       :0
integer     :0
integer_list:[0, 1]


index       :1
integer     :1
integer_list:[0, 1]

 

integer_listをイニシャライザで初期化する。

そうすれば別々の example_class で同一の integer_list を参照しない。

class ExampleClass:
integer : int = None
integer_list : list[int] = None

#integerリストを初期化
def __init__(self) :
self.integer_list = []

#リストの生成
example_object_list = []
for index in range(0,2) :
example_class = ExampleClass()
#値の設定
example_class.integer = index
example_class.integer_list.append(index)
#リストに追加
example_object_list.append(example_class)

#結果出力
for index,example_class in enumerate(example_object_list):

result = f"""
index :{index}
integer :{example_class.integer}
integer_list:{example_class.integer_list}
"""
print(result)
----------------

index       :0
integer     :0
integer_list:[0]


index       :1
integer     :1
integer_list:[1]