そこで、いくつかのセルを使ってリストを初期化する方法を探しました。独立したインスタンスn個でリストを初期化する
私はこの構文
l = [T] * n
ないokたが、私は、このことにより、大規模な落とし穴-EDを持って、これは時間オーバーのために作成されたバグの原因を探しました。 T
のインスタンスは、セルがT
の単一インスタンスへの参照を持っているかのように、何らかの形でリンクされています!
しかし、これはの場合にのみ、タイプに該当します。参照:
l1 = [int] * 10
print l1[0]
print l1[1]
l1[0] = 12
print l1[0]
print l1[1]
l2 = [Counter()] * 10
for key, value in l2[0].items():
print key, value
for key, value in l2[1].items():
print key, value
l2[0]["a"] +=1
for key, value in l2[0].items():
print key, value
for key, value in l2[1].items():
print key, value
出力:重複したデザインは、最初の場所に存在しない理由はなぜこれがそう矛盾していると:サイド質問として
<type 'int'>
<type 'int'>
12
<type 'int'>
a 1
a 1
?
このような奇妙な重複動作がなくても、T
の数で初期化を行うにはどうすればよいですか?これは、可変タイプと共通の落とし穴だ
l = [f() for _ in range(n)]
:
この動作の背後にあるデザインアイデアは何ですか? –
@lotolmencre変更可能な型は、渡されたときにコピーする必要はなく、参照のみで十分であり、変更することもできます。 (それよりも少し複雑ですが、[こちら](https://docs.python.org/3/reference/datamodel.html)の詳細を読むことができます)。 –