变量标签,一个变量可以有一个标签,也可以有多个标签;一个标签可以指向一个数据,也可以指向另一个数据。
所谓深拷贝就是对对象的资源的拷贝 所谓浅拷贝就是对引用的拷贝
Python默认复制对象是浅拷贝,是两个标签指向同一份数据,通过任何一个标签修改数据,都会改变。但如果指向改变其中一个标签的数据,另一个不希望被改变,该怎么做呢?
下面我们尝试改变深层的子对象,但需要注意一点,修改的子对象必须是可变类型,比如数字,字符串,元组属于不可数据类型。 id(a[3]).append(‘d’) c[3] 也发生改变了 c 浅拷贝,更深层特点,父对象里面的子对象地址空间竟然是相同的。无论是可变类型子对象,还是不可变类型子对象地址都是相同的,当然指的是copy()操作时已有的对象,如果拷贝后添加新对象,则不受影响。
id(a[0]) id(c[0]) id(a[3]) id(c[3])总结:浅拷贝把父对象拷贝出来,但使用的数据同一地址空间,深拷贝是完全把对象独立出来。但深拷贝浅拷贝,对于不可变数据类型的对象,都只用同一份,一旦使用索引index修改不可变数据类型对象,实际就开辟了新地址空间,贴变量标签