|
|
发表于 2017-7-31 11:11:00
|
显示全部楼层
本楼为最佳答案
这里涉及到浅拷贝和深拷贝的问题。
简单的说,浅拷贝只是列表的第一层复制到新地址,而第二层或更深的嵌套列表的元素仍是老地址,所以会跟着改变。
如果想做出完全不受影响的复制操作,可以使用深拷贝。
参见下面的例子:
- >>> import copy
- >>> list1 = [1, 2, [3 ,4], 5]
- >>> list2 = list1.copy() #浅拷贝
- >>> list1[0]=-1
- >>> list1
- [-1, 2, [3, 4], 5]
- >>> list2
- [1, 2, [3, 4], 5]#第一层的元素不改变
- >>> list1[2][0] = -1
- >>> list1
- [-1, 2, [-1, 4], 5]
- >>> list2
- [1, 2, [-1, 4], 5]#第二层的元素还是改变了
- >>> list3 = copy.deepcopy(list1) #深拷贝
- >>> list1[0] = 'A'
- >>> list1
- ['A', 2, [-1, 4], 5]
- >>> list3
- [-1, 2, [-1, 4], 5]#第一层没变
- >>> list1[2][0] = 'B'
- >>> list1
- ['A', 2, ['B', 4], 5]
- >>> list3
- [-1, 2, [-1, 4], 5]#第二层仍然没变
复制代码 |
|