python对象的浅拷贝和深拷贝
来源:互联网 发布:thunder mac 破解版 编辑:程序博客网 时间:2024/05/21 17:33
python 浅拷贝和深拷贝的操作在copy模块中,这里面有两个函数:copy()进行浅拷贝操作,deepcopy进行深拷贝操作。
浅拷贝其实就是创建了一个类型跟原对象一样,其内容是原来对象的引用。换句话说,这个拷贝的对象本身是新的,但是它的内容不是。序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施(1)完全切片操作[:];(2)利用工厂函数,比如list()、dict()等;(3)使用copy模块的copy函数。
>>> person = ['name', ['savings', 100.00]]
>>> hubby = person[:] # slice copy,方法(1)
>>> wifey = list(person) # fac func copy 方法(2)
>>> son = copy.copy(person)
>>> [id(x) for x in person, hubby, wifey,son] # 不同的对象
[18806464, 18565200, 18783888, 18770680]
>>> [id(x) for x in person] # 以下内容相同
[11226976, 18769360]
>>> [id(x) for x in hubby]
[11226976, 18769360]
>>> [id(x) for x in wifey]
[11226976, 18769360]
>>> [id(x) for x in son]
[11226976, 18769360]
要得到一个完全拷贝或者说深拷贝——创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用.
>>> dau = copy.deepcopy(person)
>>> id(dau) # 新对象
13684168
>>> [id(x) for x in dau] # 不同内容
[11226976, 13681408]
注意:1)非容器类型(比如数字、字符串和其他“原子”类型的对象,像代码、类型和xrange对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的。
2)如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。如果我们把账户信息改成元组类型,那么即便按我们的要求使用深拷贝操作也只能得到一个浅拷贝。
>>> person = ['name', ('savings', 100.00)]
>>> newPerson = copy.deepcopy(person)
>>> [id(x) for x in person, newPerson]
[18770240, 18762368]
>>> [id(x) for x in person]
[11226976, 18758272]
>>> [id(x) for x in newPerson]
[11226976, 18758272]
- Python对象的拷贝,浅拷贝和深拷贝。
- python对象的浅拷贝和深拷贝
- 21.python对象的浅拷贝和深拷贝
- Python对象的浅拷贝和深拷贝
- python的对象赋值、浅拷贝和深拷贝
- 拷贝 Python 对象 浅拷贝和深拷贝
- 拷贝Python 对象-----浅拷贝和深拷贝
- 拷贝Python对象、浅拷贝和深拷贝
- 拷贝python对象之浅拷贝和深拷贝
- 拷贝Python对象、浅拷贝和深拷贝
- 对象的深拷贝和浅拷贝
- python 的深拷贝和浅拷贝
- Python的浅拷贝和深拷贝
- Python的浅拷贝和深拷贝
- Python的浅拷贝和深拷贝
- python的浅拷贝和深拷贝
- Python 的深拷贝 和 浅拷贝
- Python对象赋值、浅拷贝和深拷贝
- 数据库的进度问题~
- 中移动3G第一阶段全业务曝光 含34个增值业务
- Java语言入门教程(五):Java语言中的构造方法
- Log4Net使用指南
- 超级实用的javascript
- python对象的浅拷贝和深拷贝
- Hello,LINQ-1
- 程序员日记
- 3G移动通信中的数据传输技术
- 生成自己的数字证书
- 弹出窗口并返回值,Event/window.Event属性和方法和returnValue的用法
- 文件夹路径my documents 含有无效字符
- ADS简要教程
- 多用户环境下新手常犯的一个错误