2017-06-01 5 views
0

元のListをそのままにして、PythonでListを操作したい。
だから私は以下のように新しく定義された変数に元のリストを置換しました:なぜ置換されたリストを追加するのですか、Pythonで元のリストも変更しますか?

Original_List = [1,5] 
Substituted_List = Orginal_List 

しかし、私はSubstituted_List.append()が、あまりにもOriginal_Listを変更やって気づいた:

Substituted_List.append(3) 
print("Original list is: %s" %Original_List) 
print("Substituted list is: %s" %Substituted_List) 

出力は次のとおりです。

Original list is: [1,5,3] 
Substituted list is: [1,5,3] 

オリジナルリストがすることになっている間:[1,5]

+0

読むネッドBatchelerの[Pythonの名前と変数に関する事実と神話は](https://nedbatchelder.com/text/names.html) –

+0

ます。また、タイプミス間違い、uは宣言しているが、 'Original_List' 2行目は 'Orginal_List' –

答えて

2

あなたが同じオブジェクト参照されているので、それは次のとおりです。

>>> Original_List = [1,5] 
>>> Substituted_List = Original_List 
>>> 
>>> id(Original_List) 
140473860198344 
>>> id(Substituted_List) 
140473860198344 
>>> 

あなたは以下を使用する必要があります:

Substituted_List = Original_List[:] 

またはあなたが使用することができます。

import copy 
Substituted_List = copy.copy(Original_List) 
1

あなたの代わりにコピーを作成slice操作を使用するにはreference

Substituted_List = Original_List 

をコピーしているので、これは次のとおりです。

Substituted_List = Original_List[:] 
0

をコンセプトはPythonで一人ひとりの変数がメモリ内のデータを指すオブジェクトであるということです。リストが別の変数(オブジェクト)に代入されると、もう一方の変数は元の変数が指し示していた古いメモリポイントを参照します。置換されたリスト変数が変更されないようにするには、list()関数を使用します。 例: -

>>> list1 = [1,2,3] 
>>> list2 = list(list1) 
>>> print(list1, list2) 
[1, 2, 3] [1, 2, 3] 
>>> list1[2]=4 
>>> print(list1, list2) 
[1, 2, 4] [1, 2, 3] 
関連する問題