python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别
Python中浅拷贝和深拷贝的区别
浅拷贝和深拷贝示意图
如上图,简单点说
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
数字,字符串是不可变类型
列表,字典是可变类型
我们看下面的案例
案例一:浅拷贝>>> import copy
#导入copy模块
>>> s=['name',['savings',100.0]]
#赋值给s
>>> t=copy.copy(s)
#将s浅拷贝给t
>>> s
['name', ['savings', 100.0]]
>>> t
['name', ['savings', 100.0]]
>>> id(s)
139814645224224
>>> id(t)
139814645264184
#查看s和t的内存空间地址,发现s和t的内存空间地址不一样
>>> id(s[0])
139814648512112
>>> id(t[0])
139814648512112
>>> id(s[1])
139946237132672
>>> id(t[1])
139946237132672
#查看s和t的子对象的内存空间地址,发现s和t的子对象的内存空间地址一样
#以上证明浅拷贝只拷贝父对象,不会拷贝对象的内部的子对象
>>> s.append('age')
>>> s
['name', ['savings', 100.0], 'age']
>>> t
['name', ['savings', 100.0]]
#s添加'age'字符串,但是t并没有添加
>>> s[0]='job'
>>> s
['job', ['savings', 100.0], 'age']
>>> t
['name', ['savings', 100.0]]
>>> s[1][1]=200.0
>>> s
['job', ['savings', 200.0], 'age']
>>> t
['name', ['savings', 200.0]]
#当我们修改s的'name'时t并没有修改,但是当我修改s的100.0时t也被修改了
#数字、字符串是不可变类型,t并不会跟着s一起被修改
#列表,字典为可变类型,t会随s的修改而被修改,100.0是属于s里的列表的值
案例二:深拷贝>>> import copy
#导入copy模块
>>> s=['name',['savings',100.0]]
#赋值给s
>>> t=copy.deepcopy(s)
#将s浅拷贝给t
>>> s
['name', ['savings', 100.0]]
>>> t
['name', ['savings', 100.0]]
#查看s和t的值
>>> id(s)
140329642791784
>>> id(t)
140329642793080
#查看s和t的内存空间地址,发现s和t的内存空间地址不一样
>>> id(s[0])
140329646079600
>>> id(t[0])
140329646079600
#查看s和t的子对象'name'的内存空间地址,发现s和t的子对象'name'的内存空间地址一样
>>> id(s[1])
140329642729344
>>> id(t[1])
140329642831240
#查看s和t的子对象['savings',100.0]的内存空间地址,发现s和t的子对象['savings',100.0]的内存空间地址不一样
#以上证明深拷贝会拷贝对象及其子对象
>>> s.append('age')
>>> s
['name', ['savings', 100.0], 'age']
>>> t
['name', ['savings', 100.0]]
#s添加'age'字符串,但是t并没有添加
>>> s[0]='job'
>>> s
['job', ['savings', 100.0]]
>>> t
['name', ['savings', 100.0]]
>>> s[1][1]=200.0
>>> s
['name', ['savings', 200.0], 'age']
>>> t
['name', ['savings', 100.0]]
#当我们修改s的'name'时t没有被修改,但是当我修改s的100.0时t也没被修改
#证明s和t是完全分离开来的,没有任何关联
总结:
浅拷贝时,当我们修改s的子对象(字典和列表等可变类型)时,t也会跟着改变。但是s添加对象时,t并不会添加
深拷贝时,s和t的内容完全分离开来,添加或修改s的对象时t并不会跟着改变
python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别相关推荐
- python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别
python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...
- python属性和方法的区别_Python中几种属性访问的区别
起步 python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__ .本文阐述它们的区别和用法. 属性的访问 ...
- python属性和方法的区别_Python中几种属性访问的区别与用法详解
起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...
- python中的字典和类的区别_Python中的 字典和字典数据类型
字典 1.字典是Python的内建数据类型,我们知道序列是以连续的整数为索引,而字典用关键字作为索引.特别的,关键字必须是不可变类型,常为字符串或者数值. #如果元组中只包含字符串和数字,它可以作为关 ...
- python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承
1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...
- python中find和findall区别_python中re的finditer与findall有什么不同
python中re的finditer与findall有什么不同 发布时间:2020-11-16 14:06:18 来源:亿速云 阅读:72 作者:Leah python中re的finditer与fin ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- python交互式和文件式区别_Python中的交互式数据可视化与Bokeh(系列五)
使用图例突出显示数据 这将我们带到本教程中的最终交互性示例:交互式图例. 在" 使用字形绘制数据"部分中,您了解了在创建绘图时实现图例是多么容易.有了这个传奇,增加交互性只是分配一 ...
- python 变量赋值是引用和拷贝_Python 中变量赋值传递时的引用和拷贝
曾经看到这样一个问题,一个字典中的元素是列表,将这个列表元素赋值给一个变量,然后修改这个列表中元素的值,结果发现,字典中那个列表也同样修改了.那个问题如下: dict = {'a':[1,2,3,4, ...
- python list tuple区别_Python list、tuple、dict区别
Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系. 每一个元素都是一个 key-value 对, 整个元素集合用大括号括起来 您可以通过 key 来引用其值 ...
最新文章
- vim 打造属于自己的 IDE
- boost::mp11::mp_partial_sum相关用法的测试程序
- 收集的安全网站【公司】
- 在线安装TIDB集群
- What?一个 Dubbo 服务启动要两个小时!
- BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
- .Net Excel 部分操作
- 3月初的日记:网站工作记录
- 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程
- 为什么rocketmq的queue分为读写?_分布式发布订阅消息系统Kafka 为什么快
- [py]flask从0到1-模板/增删改查
- 【详细】遍历Windows文件
- C语言编程入门——程序练习(下)
- 2022年电工杯B题应急物资配送问题浅析
- win32 API 调用方法
- 分享两个完整javaweb项目源码
- GPG软件签名与验证
- 微博文摘——女人与ITIL
- C语言程序static改错题,2014计算机二级C语言程序设计全真测试题
- kafak集群python外网无法访问:kafka.errors.NoBrokersAvailable: NoBrokersAvailable
热门文章
- 导出dhcp服务器配置信息的命令,用于导出和导入 DHCP 范围的 Netsh 实用工具 - Windows Server | Microsoft Docs...
- 有什么商务蓝牙耳机推荐?盘点四款通话清晰的商务蓝牙耳机
- PHP网站开发技术期末作品,PHP网站开发技术.ppt
- oneforall安装和简单使用
- 狂涨结束:内存和固态硬盘终于要降价了
- 美通社母公司Cision发布《2023全球媒体调查报告》
- 神经网络算法实例说明,简单神经网络算法原理
- selenium解决验证码的方法
- Dubbo支持哪些协议?各有什么特点?
- vb.net 教程 1-14 Hashtable 和 Dictionary比较