参考:https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象,两者完全独立。
代码实例
#!/usr/bin/python
# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
# ('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
print( 'b = ', b )
# ('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
print( 'c = ', c )
# ('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
print( 'd = ', d )
# ('d = ', [1, 2, 3, 4, ['a', 'b']])
注意
切片是深拷贝
a = b[:]
,b改变之后a不会改变
补充
对于切片 [a :b :c ]:
a:起始位置,不填写默认为0
b:结束位置(不包括序列b),不填写默认为到最后
c:每隔c位,默认为0
[::-1]和[:-1]的区别
li = "abcde"
li[:-1]
结果为:"abcd"
li = "abcde"
li[::-1]
结果为:"edcba"