Python之深浅拷贝

2019-08-21  本文已影响0人  互联网中的一个咸鱼

个人认为这个知识点比较重要,所以单独做了一个文章

Python中的浅拷贝就是对引用的拷贝,深拷贝就是对引用的拷贝,深拷贝就是对对象资源的拷贝

对赋值的认识

1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址
2.修改不可变对象(str,tupel)需要开辟新的空间
3.修改可变对象(list)不需要开辟新的空间

例如 a=3

对于数字和字符串

深浅拷贝都一样,数字和字符串在内存中使用的都是同一个内存地址


image

对于字典、列表、元组等其他类型的拷贝

赋值

image

结论:对于赋值,字典、列表、元组等其他类型用的内存地址不会变化。

浅拷贝

image

结论:所以对于浅拷贝,字典、列表、元组等类型,它们只拷贝第一层地址。

深拷贝

进行深拷贝时,字典里面的第一层和里面嵌套的地址都已经变了。对于深拷贝,它会拷贝多层,将第二层的列表也拷贝一份,如果还有第三层嵌套,那么第三层的也会拷贝,但是对于里面的最小元素,比如数字和字符串,这里就是“wu”,123,“alex”,678之类的,按照python的机制,它们会共同指向同一个位置,它的内存地址是不会变的

image
结论:对于深拷贝,字典、列表、元组等类型,它里面嵌套多少层,就会拷贝多少层出来, 但是最底层的数字和字符串地址不变

来源于https://zhuanlan.zhihu.com/p/25221086

上一篇 下一篇

猜你喜欢

热点阅读