python 中深拷贝和浅拷贝的区别
2024-08-26 00:49:11
通俗的理解,浅就是外面,深就是里面。浅拷贝的意思就是只拷贝外面的一层,深拷贝就是拷贝的里面的所有。
看两段代码:
元组:
#!/usr/bin/env/python
# -*-coding:utf-8-*-
# authour:xiapmin_pei import copy
#定义一个元组,元组里面有一个列表,可以理解成内部
atuple=(1,2,3,[4,5])
#将元组赋值给b
b = atuple
#浅拷贝
c = copy.copy(atuple)
#深拷贝
d = copy.deepcopy(atuple)
#打印每个对象的值
print "b is {0},c is {1},d is {2}".format(b,c,d) #改变atuple里面内嵌的列表,给列表增加一个6
atuple[3].append(6) print "b is {0},c is {1},d is {2}".format(b,c,d) 结果:可以看出来,将atuple赋值给b,b和atuple始终是一致的
浅拷贝外面一层不会变,但是嵌套的列表会改变
深拷贝只和atuple的原始一样,不会随着atuple的改变而改变
b is (1, 2, 3, [4, 5]), c is (1, 2, 3, [4, 5]), d is (1, 2, 3, [4, 5])
b is (1, 2, 3, [4, 5, 6]), c is (1, 2, 3, [4, 5, 6]), d is (1, 2, 3, [4, 5])
列表:
#!/usr/bin/env/python
# -*-coding:utf-8-*-
# authour:xiapmin_pei import copy alist = [1,2,3,[4,5]] b = alist
c = copy.copy(alist)
d = copy.deepcopy(alist) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist[3].append(6) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist.append(7) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) 结果:可以看出来,将alist赋值给b,b无论怎么变化,都是和alist是一样的
浅拷贝copy只拷贝第一层,第一层不改变,但是嵌套的列表随着alist的改变而改变
深拷贝deepcopy只和原先的alist是一致的,无论alist怎么改变,deepcopy只拷贝一次原先的。
alist是[1, 2, 3, [4, 5]],b是[1, 2, 3, [4, 5]], c是[1, 2, 3, [4, 5]], d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6]],b是[1, 2, 3, [4, 5, 6]], c是[1, 2, 3, [4, 5, 6]], d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6], 7],b是[1, 2, 3, [4, 5, 6], 7], c是[1, 2, 3, [4, 5, 6]], d是[1, 2, 3, [4, 5]]
最新文章
- 让Unity NavMesh为我所用
- UVA 10795 新汉诺塔问题
- sed字符串替换
- command line
- 【转】SQL Server 2008下载 (附注册码)
- MySQL 简洁连接数据库方式
- [Objective-c 基础 - 2.2] OC弱语法、类方法
- perl binlog dml操作报告
- EEPlat的元数据驱动的运行引擎
- input表单中嵌入百度地图
- php 5.6,7.0静态方法调用和new调用方法性能差距
- git 拉取分支代码 合分支
- C++ 无锁数据结构
- 详解Zookeeper原理与应用场景
- jenkins之 pipeline 小尝试
- CRC 详解
- 基于jQuery实现的腾讯互动娱乐网站特效
- python 2 类与对象
- 添加或删除 HTML dom元素
- [笔记] FMX 移动平台 TWebBrowser 问题
热门文章
- 使用PHP对二维索引数组进行排序
- jQuery方法区别:click() bind() live() delegate()区别
- oss命令使用
- python基础数据类型—int、bool、字符串的常用方法
- 51Nod 1344 走格子
- HDU4651 Partition 【多项式求逆】
- Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
- django.db.utils.DataError: (1406, ";Data too long for column 'gender' at row 1";)
- 解决nginx发布网站跨目录访问
- bzoj2212[Poi2011]Tree Rotations [线段树合并]