为什么附加一个替换列表,在python中修改原始列表?

时间:2017-06-01 06:19:30

标签: python list append substitution

我希望在保持原始列表不受影响的同时在python中操作List 所以我将原始列表替换为新定义的变量,如下所示:

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]

3 个答案:

答案 0 :(得分: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 :(得分:1)

这是因为您正在复制reference

Substituted_List = Original_List

要制作副本,请使用slice操作:

Substituted_List = Original_List[:]

答案 2 :(得分:0)

概念是在Python中,每个变量都是一个指向内存中数据的对象。当列表替换为另一个变量(对象)时,另一个变量也引用原始变量指向的旧内存点。如果您不希望替换的list-variable被更改,则使用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]