在python中复制可变列表

时间:2013-12-04 13:44:25

标签: python mutable

如何更改列表的值???

>>> a=range(0,5)
>>> b=10
>>> c=a
>>> c.append(b)
>>> c
[0, 1, 2, 3, 4, 10]
>>> a
[0, 1, 2, 3, 4, 10]

直到今天我还不知道python中的列表是可变的!

3 个答案:

答案 0 :(得分:7)

以下语句使c引用与a引用相同的列表。

c = a

要制作(浅)副本,请使用切片表示法:

c = a[:]

或使用copy.copy

import copy

c = copy.copy(a)

>>> a = range(5)
>>> c = a[:]  # <-- make a copy
>>> c.append(10)
>>> a
[0, 1, 2, 3, 4]
>>> c
[0, 1, 2, 3, 4, 10]
>>> a is c
False
>>> c = a    # <--- make `c` reference the same list
>>> a is c
True

答案 1 :(得分:1)

您正在c引用与a相同的列表。因此,要制作浅表副本,请使用list()

>>> a = [1,2,3]
>>> b = list(a)
>>> b
[1, 2, 3]
>>> b.append(4)
>>> a
[1, 2, 3]
>>> b
[1, 2, 3, 4]
>>> 

答案 2 :(得分:1)

您可以将列表转换为元组,这是一个不可变列表。

Dive into Python book

  

元组是一个不可变的列表。一旦创建了元组,就无法以任何方式进行更改。

另外

  

元组可以转换为列表,反之亦然。内置元组函数接受一个列表并返回一个具有相同元素的元组,list函数接受一个元组并返回一个列表。实际上,元组冻结了一个列表,列表解冻了一个元组。