コードを読みやすくするために、独自のデータ クラスを作成したいと考えています。Myclass
問題は、クラス (例: ) をリストに適用すると、予期しない結果が得られることです。具体的には、リストの個々のメンバーに対して計算を実行すると、すべてのメンバーが 1 つの変数として扱われます。この場合の結果は、すべてのメンバーの合計に等しくなります。次の例を考えてみましょう。
#!/usr/bin/env python
# create a simple class
class Myclass:
def __init__(self,mem):
self.mem = mem
def __repr__(self):
return '%d'%self.mem
# simple program: each list item should be unique
if __name__=='__main__':
# initate array
nlst = 3
dlst = [Myclass(0)]*nlst
ilst = [0]*nlst
# generate example data
for i in range(nlst):
for j in range(nlst)[i:]:
dlst[i].mem += (i+j)
ilst[i] += (i+j)
print 'dlst = ',dlst
print 'ilst = ',ilst
この例では、リストdlst
(長さnlst = 3
) が開始されます。メンバーのタイプは であり、Myclass
ゼロから開始されます。次に、単純な加算がループで実行されます。参照として、整数のリストが含まれています ( ilst
)。この例の結果は次のようになります。
ilst = [3, 5, 4]
しかし、型のメンバーのリストの場合Myclass
、結果は
dlst = [12, 12, 12]
つまり、それらは同じ変数のように見え、その値はリストの個々のメンバーの合計です。
助けてください。