11
私はインタプリタを驚いていて、わからないものを見つけました。リストとして1つの要素としてタプルを作成し、そのリストを更新しようとすると、何か変なことが起こります。たとえば、私が実行したときに、この:タプル内のリストを更新する
tup = (1,2,3,[4,5])
tup[3] += [6]
私が手:
私は期待まさにあるTypeError: 'tuple' object does not support item assignment
。私は再びタプルを参照する場合しかし、その後、私が手:だからリストは実際にはPythonが例外をスローしたにもかかわらず、更新された
>>> tup
(1, 2, 3, [4, 5, 6])
。それはどのように機能するのですか?私は実際にこのようなことをしたいシナリオを想像することはできませんが、何が起こっているのかを理解したいと思います。ありがとうございました。
私は、拡張が単に 'tup [3] .__ iadd __([6])ではないという理由で答えが得られると思います。 'tup [3] = tup [3] .__ iadd __([6])'です。 'list .__ iadd__'が突然変異しているのと同じオブジェクトを返すだけで便利です。 – zondo
ドキュメントへのリンクありがとうございます!それは大きな助けです。 –
ありがとう、私はドキュメントでこれをキャッチしませんでした。だから、私はちょうどtup [3] .__ iadd __([6])を実行しているので、リストが更新されています。だから私はそれが失敗したという例外を出しますが、その時点ですでにリストを更新していますか? –