Python中的赋值,浅拷贝和深拷贝的区别赋值(=)python深拷贝函数,就是创建了对象的一个新的引用python深拷贝函数 , 修改其中任意一个变量都会影响到另一个 。
浅拷贝python深拷贝函数:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2 , 工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象 , 并且递归的复制它所包含的对象(修改其中一个 , 另外一个不会改变){copy模块的deep.deepcopy()函数}
Python3 & 浅拷贝与深拷贝在Python中对象的赋值(=)其实就是对象的引用 。即:当创建一个对象,把它赋值给另一个变量时,python并没有拷贝这个对象 , 只是拷贝了这个对象的引用而已 。
Python中对象的拷贝分为:浅拷贝(copy)和深拷贝(deepcopy) 。
浅拷贝:拷贝了最外围的对象本身 , 内部的元素都只是拷贝了一个引用而已 。也就是,将原对象在内存中引用地址拷贝过来,然后让新的对象指向这个地址 。可以使用“=”或列表自带的copy()函数(如list.copy()),或使用copy模块的copy()函数 。
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用 。即把对象复制一遍,并且该对象中引用的其他对象也同时复制,完全得到一个新的一模一样的对象 , 对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开 。深拷贝只能使用copy模块中deepcopy()函数,使用前要导入:from copy import deepcopy 。
Python中对象分为不可变对象 、可变对象 。
不可变对象:一旦创建就不可修改的对象,例如:字符串、元组、数字
可变对象:可以修改的对象,例如:列表、字典 。
其中Python中的切片可以应用于:列表、元组、字符串,但不能应用于字典 。
而深浅拷贝,可应用于序列(列表、元组、字符串),也可应用于字典 。
其中不可变对象 , 不管是深拷贝还是浅拷贝,地址值在拷贝后的值都是一样的 。
以下以元组(不可变类型)为例
从上述示例可以看出:
不可变对象类型,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已 。
所以不可变类型 , 不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的 。
以下以列表(可变类型)为例
第一种方法:使用=号浅拷贝
输出结果:
第二种方法:使用copy浅拷贝
输出结果:
第三种方法:使用deepcopy深拷贝
输出结果:
从上述示例可以看出:
=浅拷贝:值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等
总结:
1 , 深浅拷贝都是对源对象的复制,占用不同的内存空间 。
2,不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的 。
3 , 可变类型的对象,使用=浅拷贝时,值相等,地址相等 , 对新对象里的值进行修改同时会影响原有对象;使用copy浅拷贝时值相等,地址不相等;使用deepcopy深拷贝时值相等,地址不相等 。可以看出针对可变类型copy浅拷贝和deepcopy深拷贝,对新对象里的值进行修改不会影响原有对象 。
python深拷贝和浅拷贝的区别1、浅拷贝(shallow copy)
所谓“浅拷贝” , 是指创建一个新的对象,其内容是原对象中元素的引用 。(拷贝组合对象,不拷贝子对象)
推荐阅读
- cad多张转pdf,cad多张转换pdf格式
- 微信视频号内测有风口吗,微信视频号内测结束了吗
- 闭月羞花动作游戏,闭月羞花角色
- 包含erp系统用的sip的词条
- mysql怎么赚钱 mysql靠什么赚钱
- 鸿蒙系统显示名字,鸿蒙系统桌面
- 断网怎么连路由器教程,wifi断网了怎么连接
- 电脑端怎么看公众号直播,电脑端怎么看公众号直播视频
- go语言清理 go语言 cuda