在 Python 中,标识一个对象唯一身份的是:对象的id
(内存地址),而浅拷贝就是创建一个具有相同类型,相同值但不同id
的新对象。
在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
不可变对象类型,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的
a = [1,2,3] #创建一个列表
b = a #复制创建的列表
b.append(4) #将复制的列表里加入一个元素
print(a,b)
输出结果为:
由结果可见,将a列表赋给b列表后,改变b列表中的值,a列表中的值也相应的发生改变。