# filename : reference.py
animal_list1 = ['cat', 'dog', 'pig', 'fish'];
animal_list2 = animal_list1;
del animal_list1[3]; #delete fish
print 'animal_list1 :', animal_list1;
print 'animal list2 :', animal_list2;
# output is :
# animal_list1 : ['cat', 'dog', 'pig']
# animal list2 : ['cat', 'dog', 'pig']
对象与参考的示例2:
# filename : reference.py
animal_list1 = ['cat', 'dog', 'pig', 'fish'];
animal_list2 = animal_list1[:]; #slice operator
del animal_list1[3]; #delete fish
print 'animal_list1 :', animal_list1;
print 'animal list2 :', animal_list2;
# output is :
# animal_list1 : ['cat', 'dog', 'pig']
# animal list2 : ['cat', 'dog', 'pig', 'fish']
通过上面这两段代码,需要记住的是:
如果只是想用另外一个变量名来操作同一块内存区域,可以如代码1那样操作;否则复杂对象的复制必须使用切片操作来取得拷贝。
0
顶
0
踩
分享到:
2011-12-06 16:46
浏览 891
评论
1 楼
mirguest
2011-12-07
如果更复杂,推荐用copy中的deepcopy进行复制。
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
[GCC 4.6.1] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> a = range(10)
>>> b = range(11, 20)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> c = [a, b]
>>> d = c[:]
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> d[1][3] = "99"
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, '99', 15, 16, 17, 18, 19]]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, '99', 15, 16, 17, 18, 19]
>>>
>>>
>>> import copy
>>> a = range(10)
>>> b = range(11, 20)
>>> c = [a, b]
>>> d = copy.deepcopy(c)
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> d[1][3] = "99"
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, '99', 15, 16, 17, 18, 19]]
>>> c
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>