2017-12-27 19 views
0

私は以下のようなコードを持っています。私はlist1とlist2を印刷するときに同じ要素を表示しますが、list2に既存のlist1を代入した後に9を追加しました。Pythonでのリストの割り当て

list1=[1,2,3,4] 
list2=list1 
list1.insert(4,9) 
print(list1) 
print(list2) 

私の疑問をクリアしてください。

+2

は、Pythonで、 'リスト2 = list1'は_not_ LIST1の別のコピーを作成しません。 list1とlist2は_same_値を参照します。詳細については、https://nedbatchelder.com/text/names.htmlを参照してください。 –

+4

[参照ではなく値によるpythonリストの可能な複製](https://stackoverflow.com/questions/8744113/python-list-by-value-not-by-reference) – Ajax1234

+0

私はその点を理解しています。ご協力いただきありがとうございます。 – hieko

答えて

3

pythonでは、変数名はという参照番号の変数です。 list1list2の両方が同じリストを参照しているので、9をそのリストに挿入すると、その両方に変更が表示されます。それらを区別したい場合は、明示的なコピー(the copy module、スライス表記list2 = list1[:]、またはその他の方法を使用する必要があります)を作成する必要があります。

+0

私はそのような要求が必要な場合、何らかの目的のために別のリストにリストのコピーを作成したいのですが?どうすればいいの?コメントしてください。 – hieko

+1

参照:https://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list – MrT

1

あなたが混乱している間、

我々は異なるリストを持っている

?エイリアスが作成されたときの

あなたが書かれているとおり:

list1=[1,2,3,4] 
list2=list1 

上記のコードはlist2list1をマッピングします。

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] 
関連する問題