浅拷贝是创建一个值相同的对象,用等号直接赋值才是同一个对象。
等号赋值:- >>> a = [1, 2, 3]
- >>> b = a
- >>> b
- [1, 2, 3]
- >>> a[0] = 4
- >>> b
- [4, 2, 3]
- >>> a
- [4, 2, 3]
- >>>
复制代码
浅拷贝:- >>> import copy
- >>> a = [1, 2, 3]
- >>> b = copy.copy(a)
- >>> # 浅拷贝
- >>> a[0] = 4
- >>> a
- [4, 2, 3]
- >>> b
- [1, 2, 3]
- >>>
复制代码
值得注意的是,如果改变列表对象中一个可变对象(比如列表)的值时,其浅拷贝也会发生变化。- >>> import copy
- >>> a = [1, 2, 3, [1, 2, 3]]
- >>> b = copy.copy(a)
- >>> a[3].append(4)
- >>> a
- [1, 2, 3, [1, 2, 3, 4]]
- >>> b
- [1, 2, 3, [1, 2, 3, 4]]
- >>>
复制代码 但是使用深拷贝就不会有这个问题。- >>> import copy
- >>> a = [1, 2, 3, [1, 2, 3]]
- >>> b = copy.deepcopy(a)
- >>> a[3].append(4)
- >>> a
- [1, 2, 3, [1, 2, 3, 4]]
- >>> b
- [1, 2, 3, [1, 2, 3]]
- >>>
复制代码 |