在讲深浅拷贝之前,我们先重温一下 is
和==
的区别。
在判断对象是否相等比较的时候我们可以用is
和 ==
-
is:比较两个对象的引用是否相同,即 它们的id 是否一样
-
== :比较两个对象的值是否相同。
id() ,是Python的一个内置函数,返回对象的唯一标识,用于获取对象的内存地址。
a is b
为 True
a is b
返回的值为False。is 和 == 哪个效率高?
is
比较的效率更高,因为它只需要判断两个对象的id是否相同即可。==
则需要重载eq 这个函数,遍历变量中的所有元素内容,逐次比较是否相同。因此效率较低浅拷贝 深拷贝
=
就可以了。而拷贝又分为浅拷贝和深拷贝-
浅拷贝:拷贝的是对象的引用,如果原对象改变,相应的拷贝对象也会发生改变 -
深拷贝:拷贝对象中的每个元素,拷贝对象和原有对象不在有关系,两个是独立的对象
赋值
id
是相同的。说明指向了同一个内存地址。
因为每次重新执行的时候内存地址都是发生改变的,此时的id(a) 的值46169960与52531048是一样的
拷贝
-
可变对象:当有需要改变对象内部的值的时候,这个对象的id不发生变化。
-
不可变对象:当有需要改变对象内部的值的时候,这个对象的id会发生变化。
浅拷贝
copy
模块的 copy.copy 进行浅拷贝。
1
, 2
和子对象的引用!
深拷贝
copy.deepcopy()
来实现深拷贝。
结语
1、深浅拷贝都会对源对象进行复制,占用不同的内存空间
2、如果源对象没有子目录,则浅拷贝只能拷贝父目录,改动子目录时会影响浅拷贝的对象
3、列表的切片本质就是浅拷贝
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python编程平台免费吗?11/30
- ♥ 如何使用python代码运行助手09/28
- ♥ python tk.text 不可编辑11/25
- ♥ Python的神奇绘图库matplotlib10/30
- ♥ 如何快速为python代码添加注释09/14
- ♥ 如何使用python爬取网上商品信息?12/31
内容反馈