python的深浅copy

#!/usr/bin/env python
#-*- coding:utf-8 -*-
a='abc'
b=a
a='def'
print(b)        #这里打印的是abc
#1.执行a = 'abc',解释器创建了字符串'abc'和变量a,并把a指向'ABC'
#2.执行b=a,解释器创建了变量b,并把变量b指向了变量a所指向的abc
#3.执行a = 'def',解释器创建了字符串'def',并把a的指向改为'def',但b并没有更改:
#所以最后打印的是abc


name={
    "z":{"age":20,"jx":"tn"},
    "h":{"age":20,"jx":"tn"},
    "x":2,
}

name2=name
name['z']['age']='22'
print('name is: ',name)
print('name2 is: ',name2)
#结果
# name is:  {'z': {'jx': 'tn', 'age': '22'}, 'h': {'jx': 'tn', 'age': 20}}
# name2 is:  {'z': {'jx': 'tn', 'age': '22'}, 'h': {'jx': 'tn', 'age': 20}}
#这里相当于做了一个别名,软连接,没有再占用一块内存。这样无论你更改name还是name2都是操作的一份数据。
#跟第一个例子是有区别的,对于字符串和数字一些数据类型的处理,会在内存创建一份新的数据,但list,元组,字典,不会这样处理。

#拷贝第一层
name3=name.copy()
name['x']='原字典改变后'
name['h']['age']='Age'
print(name)
print(name3)

#完全独立的数据,占用和元数据相同大小的内存
import copy
name4=copy.deepcopy(name)

 

posted @ 2016-05-31 00:53  (KeeP)  阅读(164)  评论(0编辑  收藏  举报