python 深拷贝与浅拷贝以及list.append( self )
来源:互联网 发布:网络工作有哪些 编辑:程序博客网 时间:2024/06/08 20:14
#Python3.2
例子:
- l = list('abc')
- a = l
- a.append('d')
- print(l)
- l.append('e')
- print(a)
- l = list('abcde')
- print(id(l))
- print(id(a))
可见,a = l 即将 a 作为 l 的引用,类似于 C 语言中 & ;如果重新生成一个 l ,即使内容一致,id 也已经变化了,由于引用计数的原因,a 这个变量名仍然能找到它所指代的对象,不会迷失;
Python标准库中有个 copy 模块,用于对象之间的拷贝,其中常用的两个函数:copy 和 deepcopy;
copy.copy() 是浅拷贝,只拷贝了父对象,不会拷贝父对象中的子对象;deepcopy 是深拷贝,可以认为是完全的复制过去了;
- l = ['a', 'b', 'c', [1, 2, 3]]
- import copy
- a = copy.copy(l)
- b = copy.deepcopy(l)
- a.append('e')
- b.append('f')
- print(a, b, l)
- a[3][2] = 'x'
- b[3][2] = 'y'
- print(a, b, l)
可见,浅拷贝后,父对象中的子对象,即上例中列表中的列表,还是被共享着的;
对于一个 list 对象
- l = ['a', 'b', 'c']
如果
- l = l.append(l)
会得出一个很有意思的结果:
- >>l
- >>['a', 'b', 'c', [...]]
如果:
- a = l[4]
- a == l
- a is l
结果都是 True;
对于上述的例子中的 l, len(l) 是 5;如果
- l = l.extend(l)
则不会出现这种效果
0 0
- python 深拷贝与浅拷贝以及list.append( self )
- python 深拷贝与浅拷贝以及list.append( self )
- python append()与深拷贝、浅拷贝
- python list 浅谈深拷贝,浅拷贝
- 浅拷贝与深拷贝、以及深拷贝的实现
- Python的浅拷贝与深拷贝
- python/c++ 深拷贝与浅拷贝
- Python 深拷贝与浅拷贝
- Python中的浅拷贝与深拷贝
- python 浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- Python中深拷贝与浅拷贝
- python浅拷贝与深拷贝
- Python 的深拷贝与浅拷贝
- python中的深拷贝与浅拷贝
- Python:深拷贝与浅拷贝
- python 赋值、浅拷贝与深拷贝
- [Python]浅拷贝与深拷贝
- 第39级台阶
- test code
- 配置MAC开发环境笔记
- userdel example
- 多核编程:选择合适的结构体大小,提高多核并发性能
- python 深拷贝与浅拷贝以及list.append( self )
- Android最佳实践之:StrictMode介绍
- sudo config
- android应用调用系统相关设置的方法
- Exception in thread "main" java.io.IOException: Invalid header signature; read 1688935826934608, exp
- 并发编程10-性能和可伸缩性
- easyui datagrid 发送两次请求
- 从网页制作到前端开发工程师难吗?
- 1020_月饼 (25)