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”的物理副本。
使用列表类的copy()方法
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