简而言之,浅拷贝就是只是复制了引用,并没有复制引用指向地址的内容,可以看做是同一个对象,使用is操作符时返回true,而深拷贝刚好相反,不管变量或者对象包含多少其他的引用都原模原样复制一份,即在内存中开辟了新的空间。
1、Python的浅拷贝:
浅拷贝内存示意图:
2、Python的深拷贝
深拷贝内存示意图:
在copy包中还有一个复制的方法为copy(),这个方法有点特殊,如果是可变类型对象那么会重新创建第一层,嵌套的引用不会重新开辟内存,但是如果为不可变类型对象只是指向同一块内存:
这里需要额外说的"=="只是比较值,“is”则是比较是否为同一个对象。
即list1 == list2 为不同的对象指向不同的内存地址,但是返回True,而list1 is list2为False,因为不同对象。