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]