之前一直知道python深拷贝浅拷贝,但是都是稀里糊涂的,看了很多博文,似懂非懂,突然明白了自己学习点薄弱点在哪里,看懂了不一定会的,还是需要自己敲一敲代码才是真的理解
直接上代码
a = [1,2,3,[4,5,6]]
b = copy.copy(a)
c = copy.deepcopy(a)
我们看下列表空间的Id值
我们可以看到地址空间不是一个
但是我们看具体的元素位置地址:
可以看到深拷贝和浅拷贝元素指向的位置不一样,浅拷贝元素位置与原列表一致,深拷贝与原列表元素空间指向不一样
这个时候对a中的列表进行修改,a[3].append(7)
a和b都改变了,深拷贝值未改变。
结论:所以深拷贝是将所有的元素拷贝,元素重新开辟了新的空间保存。浅拷贝是开辟了新的空间保存元素的值,但是元素中的值指向的空间还是原被拷贝元素位置。如果元素中值是可变元素,浅拷贝的中元素值也会改变。
所以浅拷贝是多情的种子,分手了不坚决的时候,可以偶尔来个一炮(元素中值有可变元素),藕断丝连。深拷贝,就是不吃回头草,你死你活,跟我没关系。理解深拷贝,深浅拷贝的关键在于拷贝变量内元素是否还是指向原地址