で議論しました。そうであれば、これはリストに載っている結果ではなく、クラスに含まれている結果です。例:
#!/usr/bin/python
class BedrockDenizen():
attributes = []
wilma = BedrockDenizen()
fred = BedrockDenizen()
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
フレッドとウィルマの両方が薄く、スマートで、太く、愚かであることがわかります。
ウィルマ:[ '薄い'、 'スマート'、 '脂肪'、 '愚か']
フレッド:[ '薄い'、 'スマート'、 '脂肪'、 '愚か']
その変更に伴い
class BedrockDenizen():
def __init__(self):
self.attributes = []
、唯一のウィルマは薄くてスマートで、:属性ごとのインスタンスであるように、この問題を解決するために
一つの方法は、のinitメソッドに属性の作成を置くことですdだけフレッドは脂肪と愚かです。
ウィルマ:[ '薄い' 'スマート']
フレッド:[ '脂肪'、 '愚か']
あなたはまた、私たちに多くのコードを表示する必要があるかもしれません。 @バクリュウは、問題はあなたが1つのインスタンスを作成しているだけかもしれないと指摘し、彼は正しいかもしれません。たとえば、これはあなたのコードに近い場合:
class BedrockDenizen():
def __init__(self):
self.attributes = []
neighborhood = [([BedrockDenizen()] * 2) for i in range(2)]
flintstones, rubbles = neighborhood
fred, wilma = flintstones
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
彼らが本当に別の人ではありませんので、その後フレッドとウィルマは、同じ属性を持っていきます。あなたはより多くのこのようなコードを使用したい場合があります。それはより多くの情報なしで物事の奇妙な方法のように思えるよう
class BedrockDenizen():
def __init__(self):
self.attributes = []
neighborhood = [[BedrockDenizen() for n in range(2)] for i in range(2)]
flintstones, rubbles = neighborhood
fred, wilma = flintstones
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
、しかし、あなたのニーズが何であるかに依存していること。
最小の使用例を投稿できますか? –
http://stackoverflow.com/questions/240178/python-list-of-lists-changes-reflected-across-sublists-予期せず –
私はその質問に対する答えが別の問題を解決するのではないかと恐れています。 –