核心要义:python一切皆对象。
无拷贝:
a=[1,2,3]
b=a
b.append(1)
print(a)
这里,a相当于一个指向列表[1,2,3]的指针。b=a,相当于b和a指向了同一个对象 [1,2,3]
b.append(1),相当于对b指向的对象[1,2,3]操作,使得其指向的对象变为[1,2,3,1]
而a和b指向的是同一个对象,所以print(a) 的结果是[1,2,3,1]
浅拷贝:
python中浅拷贝需要用到copy()函数。
a=[1,2,[9,9],3]
b=a.copy()
b.append(1)
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]
b[2].append('aaa')
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9, 'aaa'], 3]
从上面代码可以看到,b.append(1)之后,a的值没有改变,但是对b的对象的子对象使用append时,a就会改变。
深拷贝:
深拷贝需要用python中copy库中的deepcopy()函数。
import copy
a=[1,2,[9,9],3]
b=copy.deepcopy(a)
b.append(1)
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]
b[2].append('aaa')
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]
从上面的输出看,其实,深拷贝就是将其对象和其子对象都完全给与了一个新的内存,使得b指向的是新开辟的内存。