python序列的深拷贝和浅拷贝
- python中的不可变类型
列举:数值,字符串、元组、字节串
- 数值及字符串“可变”'的假象
num = 123
mystr = 'abc'
print(id(num), num)
print(id(mystr), mystr)
num = 456
mystr = 'def'
print('修改后...')
print(id(num), num)
print(id(mystr), mystr) # 结果:
140704113688128 123
1853358409744 abc
修改...
1853359869712 456
1853361326544 def
表面上是对变量的修改,其实质是重新建立了对象,将引用赋给了变量,原来的对象被系统回收。
- python中的可变类型
列举: 列表、字典、字节数组、对象
- 浅拷贝
浅拷贝只拷贝可变类型的引用,在拷贝后的对象中对可变类型的修改会影响到原对象。
有几种方式实现:
1. 完全切片操作
2. 利用系统函数list(), dict()
3. 利用copy模块的copy函数
ll = ['xiao', ['china', 32]]
la = copy(ll)
lb = copy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print('change...')
la[0] = 'zhang'
la[1][0] = 'usa'
la[1][1] = 40
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb) # 结果:
3006259174856 ['xiao', ['china', 32]]
3006259174536 ['xiao', ['china', 32]]
3006259174600 ['xiao', ['china', 32]]
change...
3006259174856 ['xiao', ['usa', 40]]
3006259174536 ['zhang', ['usa', 40]]
3006259174600 ['xiao', ['usa', 40]]
- 深拷贝
对比浅拷贝,深拷贝利用copy模块的deepcopy()函数会完全拷贝出独立的对象来。
ll = ['xiao', ['china', 32]]
la = deepcopy(ll)
lb = deepcopy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print('change...')
la[0] = 'zhang'
la[1][0] = 'usa'
la[1][1] = 40
lb[0] = 'wang'
lb[1][0] = 'japan'
lb[1][1] = 49
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb) # 结果:
1957762145864 ['xiao', ['china', 32]]
1957762145544 ['xiao', ['china', 32]]
1957762145672 ['xiao', ['china', 32]]
change...
1957762145864 ['xiao', ['china', 32]]
1957762145544 ['zhang', ['usa', 40]]
1957762145672 ['wang', ['japan', 49]]
- 意外发现
元组中的列表不可以修改吗?
tt = (12, 33, [44, 55, 66])
print(tt)
# 修改
tt[2][0] = 0
print(tt) # 结果:
(12, 33, [44, 55, 66])
(12, 33, [0, 55, 66]) ## 元组中的元素tt[2]不可更改为其他内容,单列表中的元素可以随意修改。
列表中的元组可以修改吗?
dd = [1, 2, 3, 4, (7, 8, 9)]
print(dd)
dd[4] = 0
print(dd) # 结果:
[1, 2, 3, 4, (7, 8, 9)]
[1, 2, 3, 4, 0] ## 列表中元组内容不可修改,但dd[4]的值可修改。
python序列的深拷贝和浅拷贝的更多相关文章
- **Python中的深拷贝和浅拷贝详解
Python中的深拷贝和浅拷贝详解 这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容. 要说清楚Python中的深浅拷贝,需要 ...
- python中的深拷贝与浅拷贝
深拷贝和浅拷贝 浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变. 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷 ...
- python中的深拷贝和浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- Python 对象的深拷贝与浅拷贝 -- (转)
本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...
- Python对象拷贝——深拷贝与浅拷贝
对象赋值 浅拷贝 深拷贝 1. 对象赋值 对象的赋值实际上是对对象的引用.也就是说当把一个对象赋值给另一个对象时,只是拷贝了引用.如: >>> t1 = tuple('furzoom ...
- 001 说说Python中的深拷贝和浅拷贝
在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...
- Python赋值语句与深拷贝、浅拷贝的区别
参考:http://stackoverflow.com/questions/17246693/what-exactly-is-the-difference-between-shallow-copy-d ...
- Python list的深拷贝和浅拷贝
深拷贝和浅拷贝 列表存储数据,列表拷贝就是数据备份 浅拷贝 优点:占用内存较少 缺点:修改深层数据,会影响原数据 深拷贝 优点:修改数据,互不影响 缺点:占用内存较大 ""&quo ...
- 浅谈python 复制(深拷贝,浅拷贝)
博客参考:点击这里 python中对象的复制以及浅拷贝,深拷贝是存在差异的,这儿我们主要以可变变量来演示,不可变变量则不存在赋值/拷贝上的问题(下文会有解释),具体差异如下文所示 1.赋值: a=[1 ...
随机推荐
- springboot操作rabbitmq
////DirectExchange directExchange = new DirectExchange("test.direct");////amqpAdmin.declar ...
- frugally-deep: Header-only library for using Keras models in C++
// Convenience wrapper around predict for models with // single tensor outputs of shape (1, 1, 1), / ...
- [CF1167D]Bicolored RBS题解
模拟两个颜色的扩号层数,贪心,如果是左括号,哪边的层数浅就放那边:如果是右括号,哪边的层数深就放那边. 至于层数的维护,两个int就做掉了 放个代码: #include <cstdio> ...
- Eclipse安装STS插件两种方式
spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- RTF筛选工具
您可借助此项筛选程序对具备.rtf扩展名的文档进行爬行遍历,以便通过搜索结果对目标文档加以访问调用.管理员应先在相关服务器上对程序文件进行注册,方可运行此项工具. 用户下载.安装并使用相关代码的行为即 ...
- laravel5.6 ORM 关联模型,一对一和一对多
Laravel5.6 关联模型的操作,主要是一对一,一对多,多对多等操作.下面示例主要解析前面两个操作用法比较常用.(操作和用法TP5类似)将关联查询使用语法hasOne.hasMany.belong ...
- 【数据库】一篇文章搞掂:Oracle数据库
PL/SQL的使用 1.安装使用 1.1.安装暂略 1.2.使用 添加环境变量 打开PL/SQL,不要登录,进入界面后,打开设置Preference 设置主目录和OCI库
- 多行文本溢出隐藏处理,兼容ie,火狐
问题 多行文本溢出隐藏,webkit内核浏览器如谷歌支持如下写法: overflow: hidden; text-overflow: ellipsis; display: -webkit-box; - ...
- 5 个免费的受欢迎的 SQLite 管理工具
SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...
- How to pass values across the pages in ASP.net without using Session
https://stackoverflow.com/questions/14956027/how-to-pass-values-across-the-pages-in-asp-net-without- ...