私は以下のようなコードを持っています。私はlist1とlist2を印刷するときに同じ要素を表示しますが、list2に既存のlist1を代入した後に9を追加しました。Pythonでのリストの割り当て
list1=[1,2,3,4]
list2=list1
list1.insert(4,9)
print(list1)
print(list2)
私の疑問をクリアしてください。
私は以下のようなコードを持っています。私はlist1とlist2を印刷するときに同じ要素を表示しますが、list2に既存のlist1を代入した後に9を追加しました。Pythonでのリストの割り当て
list1=[1,2,3,4]
list2=list1
list1.insert(4,9)
print(list1)
print(list2)
私の疑問をクリアしてください。
pythonでは、変数名はという参照番号の変数です。 list1
とlist2
の両方が同じリストを参照しているので、9
をそのリストに挿入すると、その両方に変更が表示されます。それらを区別したい場合は、明示的なコピー(the copy
module、スライス表記list2 = list1[:]
、またはその他の方法を使用する必要があります)を作成する必要があります。
あなたが混乱している間、
我々は異なるリストを持っている?エイリアスが作成されたときのと?。
あなたが書かれているとおり:
list1=[1,2,3,4]
list2=list1
上記のコードはlist2
にlist1
をマッピングします。
2つの変数が同じオブジェクトを参照しているかどうかを確認するには、is
演算子を使用できます。あなたの例では
>>> list1 is list2
# will return "True"
、Pythonはlist1
& list2
による参照、1つのリストを作成しました。したがって、同じオブジェクトに2つの参照があります。オブジェクト[1,2,3,4]
には複数の名前があり、リストは変更可能であるため、エイリアス化されていると言えます。したがって、list1
を使用して行われた変更はlist2
に影響します。
あなたが別のリストを持っているしたい場合は、あなたがこれを行う必要があります。他の言語とは異なり
>>> list1 = [1, 2, 3, 4]
>>> list2 = list1[:] # here list2 is created as a copy of list1
>>> list1.insert(4, 9)
>>> print list1
[1, 2, 3, 4, 9]
>>> print list2
[1, 2, 3, 4]
は、Pythonで、 'リスト2 = list1'は_not_ LIST1の別のコピーを作成しません。 list1とlist2は_same_値を参照します。詳細については、https://nedbatchelder.com/text/names.htmlを参照してください。 –
[参照ではなく値によるpythonリストの可能な複製](https://stackoverflow.com/questions/8744113/python-list-by-value-not-by-reference) – Ajax1234
私はその点を理解しています。ご協力いただきありがとうございます。 – hieko