一: =号,用a变量对b变量进行赋值,让b和a引用同一个对象
当指向的对象是不可变对象时:
a = 30
b = a
此时a,b都指向了同一个地址,id(a)= id(b)
a = "hello"
此时a指向了一个新的对象,b还指向原来的对象
当指向的对象是可变对象时:
a= [1,23,45,66]
b = a
b[1] = 88
此时a,b都被改变了,都是[88,23,45,66],这种赋值没有实现a和b的真正隔离。,
二、 浅拷贝
copy.copy() 返回的新对象和原有的对象对应元素的值是完全相同的,是同一个嵌套对象的引用,即浅拷贝不复制嵌套的子对象
a = [1,2,[11,22,33]]
b = a
a[0] = 2
a[2][1] = [88]
则 a = [2,2,[11,88,33]], b = [1,2,[11,88,33]]
二、 深拷贝
copy.deepcopy() 返回的新的对象是原有对象及其子对象的对应元素及其可变的嵌套子对象的递归复制,但不可修改的子对象仍然是共享的,不会复制
a = [1,2,[11,22,33]]
b = a
a[0] = 2
a[2][1] = [88]
则 a = [2,2,[11,88,33]], b = [1,2,[11,22,33]]
摘自《Python3 从入门实战》