我希望在保持原始列表不受影响的同时在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]
答案 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]