python中的对象之间赋值时是按引用传送的,如果需要拷贝对象,需要使用标准库中的copy模块
1、copy.copy 浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。(子对象(数组)修改,也会修改)
2、copy.deepcopy 深拷贝,拷贝对象及其子对象(原始对象)
-
import copy
-
a=[1,2,[3,4],{'a':1}] # 原始对象
-
b=a # 赋值,传对象的引用
-
c=copy.copy(a) # 对象拷贝,浅拷贝
-
d=copy.deepcopy(a) # 对象拷贝,深拷贝
-
e=a[:] # 能复制序列,浅拷贝
-
a.append('add1') # 修改对象a
-
a[2].append('add2') # 修改对象a中的[3,4]数组对象
-
a[3]='666'
-
print('a:',a)
-
print('b:',b)
-
print('c:',c)
-
print('d:',d)
-
print('e:',e)
-
"""
-
执行结果:
-
a: [1, 2, [3, 4, 'add2'], '666', 'add1']
-
b: [1, 2, [3, 4, 'add2'], '666', 'add1']
-
c: [1, 2, [3, 4, 'add2'], {'a': 1}]
-
d: [1, 2, [3, 4], {'a': 1}]
-
e: [1, 2, [3, 4, 'add2'], {'a': 1}]
-
解释:copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。子对象(数组)修改,也会修改
-
copy.deepcopy 深拷贝 拷贝对象及其子对象(原始对象)
-
"""