代入の (一見) 奇妙な動作に気付きました。これにより、何度かプログラミングの間違いを犯してきました。
最初に次の例を参照してください。
>>> i = 0
>>> t = (i,)
>>> t
(0,)
>>> i += 1
>>> t
(0,)
予想どおり、 の値がインクリメントされた後でも、 の一意の要素の値はt
変わりません。i
次を参照してください。
>>> l = [0]
>>> t = (l,)
>>> t
([0],)
>>> l[0] += 1
>>> t
([1],) # <- ?
t
最初の zero inが oneになった理由がわかりません。t
...への参照でそれをインクリメントした場合
>>> t[0][0] += 1
... 値が変更されたことは理解できますが、前の例では だけl
が増加するときに明示的に参照されているため、これは当てはまりません。
2 つの質問があります。
- なぜそうなのですか?
- これに関して知っておくべき特別なルールはありますか?