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

why does appending a substituted List, modify the orginal list too in python?

我想在 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]

这是因为您正在复制 reference

Substituted_List = Original_List

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

Substituted_List = Original_List[:]

这是因为你引用了同一个对象:

>>> 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)

概念是,在 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]