2017-06-01 124 views
0

我想在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'你提到的第二行是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

这是因为要复制的reference

Substituted_List = Original_List 

要制作副本,而不是使用slice操作:

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] 
相关问题