python序列的深拷贝和浅拷贝
2024-10-07 13:23:05
- 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]的值可修改。
最新文章
- Solr5.5.1 IK中文分词配置与使用
- SQL Agent服务无法启动如何破
- 一个java的Profile工具
- Oracle计算时间函数(对时间的加减numtodsinterval、numtoyminterval) (转)
- 我与solr(六)--solr6.0配置中文分词器IK Analyzer
- A. Puzzles CodeForces Round #196 (Div.2)
- DOM_节点层次
- 3月3日(2) Search Insert Position
- 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
- javaScript常用方法整合(项目中用到过的)
- 创建实体数据模型需要注意的,不要选单复数形式,否则AddObject出问题
- typecho博客出404页面修改方法
- javascript高级知识分析——作为对象的函数
- nginx读取图片没有权限
- UNIX网络编程——客户/服务器程序设计示范(四)
- python基础成长之路三
- CF835F Roads in the Kingdom/UOJ126 NOI2013 快餐店 树的直径
- vue proxyTable 跨域问题。
- [LeetCode&;Python] Problem 350. Intersection of Two Arrays II
- 关于内核中spinlock的一些个人理解 【转】