浅拷贝:引用copy.copy
深拷贝:复制copy.deepcopy
!!! 列表拷贝
浅拷贝的就是列表里的东西不会拷贝,只是引用。
a = [11,22]
b = [33,44]
c = [a,b]
e=c
f.copy(c)
g.copy.deepcopy(c)
以上e,f,g三个每个都不一样
为e指向c,id是一样的即内存一样
f浅拷贝c ,f和c的id会不一样但是c里的a和b是指向,不是真正的复制
g深拷贝c,g和c的id不一样,不仅如此,里边的a和b也不一样
!!! 元组拷贝
用copy拷贝时元组不拷贝,因为元组不能增删改查。所以遇到元组是自动指向。
如果元组里有指向不可变类型的数据时浅拷贝和深拷贝一样,都是指向
如果元组里有可变类型数据时(例如列表)浅拷贝不变,深拷贝会递归把所有的东西都拷贝
!!! 某些操作依然拷贝(列表切片)
面试题 [a,b,c,d]变成[d,c,b,a]的话怎么做?
a = [11,22]
b = [33,44]
c = [a,b]
d = c[ : ]
d的意思就是把c复制一份,但是呢id发生了改变
!!! 字典
字典是无序的key通过哈希来得到,字典里的key和value,key在字典里存着但是value不在字典里存着。例如以下
d = dict(name = "meiya",age=22)
cd = d.copy
那么meiya就不在字典里存着,在字典里存着的 。那么在复制的时候co和d共同指向meiya,一旦meiya进行更改,两个都会变化
!!! copy在函数中引用
在以上函数的操作中out100为什么还是11,22,33呢?是因为深拷贝进行了新建内存操作。作为参数调用的时候新建的内存变成了【11,22,33,33】但是nums没变
来源:CSDN
作者:小美元
链接:https://blog.csdn.net/weixin_41621686/article/details/104107505