赋值、深拷贝、浅拷贝的区别
赋值b=a 只传递对象的引用,b指向对象a的内存地址空间,因此,原有列表a改变的同时,被赋值的b也会做相应的改变。 浅拷贝b1=copy.copy(a) a与b1的内存地址不同,但是子对象的内存地址相同,因此,原始数据改变并不会造成深拷贝里面任何子项的改变 深拷贝b2=copy.deepcopy(a) a与b2的内存地址空间不同,包含子对象的拷贝,所以原始对象的改变并不会造成深拷贝里面的任何子对象的改变 当深拷贝和浅拷贝针对的对象全部是不可变数据类型时,两者效果相同; 当深拷贝和浅拷贝针对的对象包含的时可变数据类型时,两者才出现上述区别。 可变数据类型 不可变数据类型 list 所有数据类型、波尔型、元组、str 浅拷贝的实现 深拷贝的实现 li.copy( ) 或 li[:] 或 copy.copy( ) li.deepcopy( ) 可变数据类型镶嵌可变数据类型 >> > import copy >> > a = [ 1,2 ] >> > b = [ 3,4 ] >> > c = [ a,b ] >> > c [ [ 1, 2 ] , [ 3, 4 ] ] >> > d = copy.copy ( c ) >> > id ( a ) 139939016415712 >> > id ( b ) 139939016415640 >> > id ( c )