Open1

Python(データサイエンス関連)

amaama

リストに変数を格納するときの挙動を確認

よく間違うのでメモ
メモリを参照しているとかしていないとか?の話のはず。

forループ外でインスタンスを定義

class ABC():
    
    def __init__(self):
        pass
    
    def fit(self, i):
        self.i = i

abc = ABC()

list_abc = []
for i in range(5):
    abc.fit(i)
    list_abc.append(abc)

for abc in list_abc:
    print(abc.i)

結果

4
4
4
4
4


forループ内でインスタンスを定義

class ABC():
    
    def __init__(self):
        pass
    
    def fit(self, i):
        self.i = i

list_abc = []
for i in range(5):
    abc = ABC()
    abc.fit(i)
    list_abc.append(abc)

for abc in list_abc:
    print(abc.i)

結果

0
1
2
3
4


forループ内でインスタンスを定義し、コピーしてリストに格納

import copy

class ABC():
    
    def __init__(self):
        pass
    
    def fit(self, i):
        self.i = i

abc = ABC()

list_abc = []
for i in range(5):
    abc.fit(i)
    list_abc.append(copy.copy(abc))

for abc in list_abc:
    print(abc.i)

結果

0
1
2
3
4