Python - 复制列表


在Python中,变量只是内存中对象的标签或引用。因此,赋值“lst1 = lst”引用内存中的同一列表对象。看一下下面的例子 -

lst = [10, 20]
print ("lst:", lst, "id(lst):",id(lst))
lst1 = lst
print ("lst1:", lst1, "id(lst1):",id(lst1))

它将产生以下输出-

lst: [10, 20] id(lst): 1677677188288
lst1: [10, 20] id(lst1): 1677677188288

因此,如果我们更新“lst”,它将自动反映在“lst1”中。将 lst[0] 更改为 100

lst[0]=100
print ("lst:", lst, "id(lst):",id(lst))
print ("lst1:", lst1, "id(lst1):",id(lst1))

它将产生以下输出-

lst: [100, 20] id(lst): 1677677188288
lst1: [100, 20] id(lst1): 1677677188288

因此,我们可以说“lst1”不是“lst”的物理副本。

使用List类的复制方法

Python 的列表类有一个 copy() 方法来创建列表对象的新物理副本。

句法

lst1 = lst.copy()

新的列表对象将具有不同的 id() 值。以下示例演示了这一点 -

lst = [10, 20]
lst1 = lst.copy()
print ("lst:", lst, "id(lst):",id(lst))
print ("lst1:", lst1, "id(lst1):",id(lst1))

它将产生以下输出-

lst: [10, 20] id(lst): 1677678705472
lst1: [10, 20] id(lst1): 1677678706304

即使两个列表具有相同的数据,它们也具有不同的 id() 值,因此它们是两个不同的对象,并且“lst1”是“lst”的副本。

如果我们尝试修改“lst”,它不会反映在“lst1”中。请参阅以下示例 -

lst[0]=100
print ("lst:", lst, "id(lst):",id(lst))
print ("lst1:", lst1, "id(lst1):",id(lst1))

它将产生以下输出-

lst: [100, 20] id(lst): 1677678705472
lst1: [10, 20] id(lst1): 1677678706304