例は 2 つあり、最初の例は次のとおりです。
リーリーこのとき、a=[3,4,5,6,7]
2つ目は以下の通りです。
リーリー
なぜこのようなことが起こるのでしょうか? 私の 2 番目の書き方に何か問題があるのでしょうか?
初心者の方、アドバイスをお願いします!
大家讲道理2017-06-12 09:27:09
ここで 2 つの問題が発生しました:
1 つ目は、上で述べたように、a[0] の値を変更していますが、変更された i
放入列表去处理, 或者说, 你漏了把i
を質問内のコードに書き込んでいません:
正しい方法:
2 番目の質問は、上記で質問したものですが、a=[[0,0]]*5
の定義メソッドがすべて a=[[ 7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
a=[[0,0]]*5
这种定义方法, 结果出来发现全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
这个问题和第一个问题有个相同之处, 就是你应该是忘了写a[i][0] = i + 3
,
其次就是: 如果用[[0, 0]] * 5
この質問には最初の質問と共通点が 1 つあります。 a[i][0] = i + 3
を書き忘れました。
[[0, 0]] * 5
リストを使用して生成された場合です。 、その中のすべては参照であり、5 つのオブジェクトではなく、すべて同じオブジェクトです。例を参照してください:
リーリー
id
值看到, 他们都是一样的地址, 所以列表中的5个对象, 全是同一个, 所以当你执行a[i][0]= i+3
合格
できる場合、どれだけ多くの要素を変更しても、最終的には同じリストを変更するだけです!
漂亮男人2017-06-12 09:27:09
i変数を使って反復する必要があるため、常に0を変更すると、当然a[0]が上書きされ、それが最後の値になります
最初のコードでは、a=[3,4を取得できません,5, 6,7]、i 変数を使用する必要があります
2番目のコード:
リーリーコードを間違って書いたようです。おそらくこの質問をしたいのでしょう
リーリープリントアウトできます
リーリー@Lin_R が正しいです
phpcn_u15822017-06-12 09:27:09
実際、2 番目の方法は個別ではなく共有されます。これは、この時点ではリストであり変数であるのに対し、最初のメソッドは数値であり不変であるためです。