Python、これはバグですか、タプル内のリストに追加するとNoneになりますか?[重複]
-
09-12-2019 - |
質問
これは私が長い間書いた最も短い例の1つです
私はtuple3を作成して更新します
In [65]: arf=(0,1,[1,2,3])
In [66]: arf=(arf[0],arf[1], arf[2] )
In [67]: arf
Out[67]: (0, 1, [1, 2, 3])
それで、再割り当てはうまくいきました。
今、私はそれの内容を変更しようとします。
In [69]: arf=(arf[0],arf[1], [2] )
In [70]: arf
Out[70]: (0, 1, [2])
In [71]: arf=(arf[0],arf[1], arf[2].append(3) )
In [72]: arf
Out[72]: (0, 1, None)
私は何も戻って取得しませんか???こんにちはう感?申し訳ありませんが、私はpythonの初心者です。
解決
list.append()
常に戻ります None
だから arf[2].append(3)
が追加されます 3
に arf
と返す None
あなたはこの変更を見ることは決してありません arf[2]
あなたはすぐに再バインドされているので arf
新しく作成されたタプルに
おそらくこれはあなたが望むものです
arf = (arf[0], arf[1], arf[2]+[3])
他のヒント
ザ- list.append
メソッドは、所定の位置にリストを変更し、返します None
.これはバグではありません、これはちょうどどのようにです append
メソッドは動作します。
append
doesn'[tは新しいリストを返しますが、古いリストをその場で変更します:
>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]
Gnibblerの答えを詳しく説明するには、リストします。append()はリスト自体を変更しますが、リストの新しい値を返しません。それは戻ります None
.したがって、コマンド71はarf[2]の値を必要な方法で変更しますが、すぐに戻ります None
そして、arf[2]をそれに設定します。
あなたの例の自己参照は物事を少し難読化しますが、次のようなコマンドを試してみると someothervariable=arf[2].append(3)
, 、あなたはそれがどのように動作するかが表示されます。 someothervariable
に設定されています。 None
また、arf[2]には、明示的な代入文なしで3が追加されています。