python中的赋值、浅拷贝与深拷贝

python中的赋值、浅拷贝与深拷贝


在介绍这三者的概念之前,我们首先来了解一下python的内存管理机制,见文章(该文章随后完成),在看这篇文章时,我们首先了解一些有关python的基础知识。
1、如何查看python中某个对象在内存中的地址?

# python2.7中id的用法
a = "Hello world!"
print id(a)

2、python分为可变对象和不可变对象,分别是那些?
TODO:后续详细的整理一下这块
【转】python中的可变对象和不可变对象介绍
【转】深拷贝与浅拷贝参考文章

浅拷贝(顶层复制)、深拷贝

1、例子

执行以下操作,输出结果为什么?

a = [1,[2,3]]
b = a    # 赋值
c = list(a)    # 相当于浅拷贝
d = a[:]		# 浅拷贝
e = copy.copy(a)	# 浅拷贝
f = copy.deepcopy(a)  # 深拷贝
a[0] = 0
a[1].append(4)
a.append(5)
print a, id(a)
print b, id(b)
print c, id(c)
print d, id(d)
print e, id(e)
print f, id(f)

结果为:

>>> print a, id(a)
[0, [2, 3, 4], 5] 4435126896
>>> print b, id(b)
[0, [2, 3, 4], 5] 4435126896
>>> print c, id(c)
[1, [2, 3, 4]] 4435127400
>>> print d, id(d)
[1, [2, 3, 4]] 4435126968
>>> print e, id(e)
[1, [2, 3, 4]] 4435127544
>>> print f, id(f)
[1, [2, 3]] 4435127112

为什么会出现这种情况,我们接下来详细分析以下:
python中的赋值、浅拷贝与深拷贝