首页 » python编程 » 关于python中等号赋值,浅复制和深复制的理解

关于python中等号赋值,浅复制和深复制的理解

时间:2013-07-03作者:felix.chan分类:python编程评论:0

关于python中等号赋值,浅复制和深复制的理解:

import copy
str = [1,2,3,[4,5]]
a = str
b = copy.copy(str)
c = copy.deepcopy(str)
 
print(str)
print(id(str))
print(id(a))
print(id(b))
print(id(c))
 
str[3].append(6)
 
print(str)
print(a)
print(b)
print(c)
 
输出结果为:
[1, 2, 3, [4, 5]]
12316064
12316064
12350728
12335544
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5]]

可以看出当str的对象类型为列表类型时,如果是等号赋值语句,则直接应用原来的对象(id值都是一样的);如果是浅复制,则创建了一个新的对象(id值不一样),类型和原对象类型相同,元素还是引用的元对象的元素(元素值会随着原对象的变化而变化);如果是深复制,则创建了一个新的对象,类型和原对象类型相同,且对象元素也是新创建的,不会受原来对象元素的变化而影响。

注意:以上复制只对列表等类型的对象有效。如果是字符串或数值类型的对象是,则全部采用的是引用方式。

原创文章,转载请注明: 转载自红防联盟www.rednat.com

本文链接地址: 关于python中等号赋值,浅复制和深复制的理解

|2|right
0 条评论

暂时没有评论!

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>