关于小悟志网站地图归档友情链接联系Feed

云上小悟 + 

首页 » InfoTech »

Python的深拷贝和浅拷贝

InfoTech
2017年1月17日 / 80次阅读
标签:麦新杰用Python

文章《Python的深拷贝和浅拷贝》的特色图片

Python有一个著名的深拷贝和浅拷贝的问题,这个问题是由于python的变量都是对象引用(ref)造成的,在正常拷贝赋值的时候,出现的问题。

 

看下面代码:

>>> people = ['name',['cunkuan',500]]
>>> xin = people[:]
>>> chi = list(people)
>>> [id(x) for x in (people,xin,chi)]
[10623624, 10623752, 10624264]
>>> xin[0] = 'kop'
>>> chi[0] = 'yut'
>>> xin, chi
(['kop', ['cunkuan', 500]], ['yut', ['cunkuan', 500]])
>>> xin[1][1] = 100
>>> xin, chi
(['kop', ['cunkuan', 100]], ['yut', ['cunkuan', 100]])
>>>
>>> import copy
>>> ji = copy.deepcopy(people)
>>> xin[1][1] = 900
>>> xin,ji
(['kop', ['cunkuan', 900]], ['name', ['cunkuan', 100]])
>>>

正常的拷贝都是浅拷贝,由于有指向相同地址的变量,容易出问题;

深拷贝需要用到copy模块的deepcopy调用。

 

如果list没有内嵌list,正常拷贝就是ok的:

>>>
>>> aa = [1,2,3,4,5]
>>> bb = aa[:]
>>> id(aa)
11033096
>>> id(bb)
11032264
>>> aa[0]=9876
>>> aa,bb
([9876, 2, 3, 4, 5], [1, 2, 3, 4, 5])
>>>
>>> cc = list(aa)
>>> aa[0]=666
>>> aa,bb,cc
([666, 2, 3, 4, 5], [1, 2, 3, 4, 5], [9876, 2, 3, 4, 5])
>>>

 

list对象的copy函数就是一个shallow copy,看看官方的定义:

list对象的copy函数就是一个shallow copy

list对象的copy函数就是一个shallow copy

 

关于Python深拷贝和浅拷贝的理解,推荐阅读:Python的动态类型机制(Dynamic Typing)

本文链接:http://www.maixj.net/ict/shen-qian-kaobei-13979
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1

网站二维码
拍拍贷
go to top