【python】深浅copy

python跟java中的变量本质是不一样的,Python的变量实质上是一个指针(int型或str型),而java的变量是一个可操作的存储空间。

例1

a = 1
b = a
print(id(a), id(b))       # 2052450224 2052450224
a = 2  #不可变对象被重新赋值,重新分配了一块内存,ID就变了
print(a, b)      # 2 1
print(id(a), id(b))       # 2052450240 2052450224

例2

列表直接赋值给列表不属于拷贝, 只是内存地址的引用

list1 = ["a", "b", "c"]
list2 = list1
list1.append("d")
print(list1, list2)     # ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd']
print(id(list1), id(list2))     # 1947385383176 1947385383176

例3

浅拷贝

list1 = ["a", "b", "c"]
list2 = list1.copy()
list3=list(list1)  #转换也是浅copy
list1.append("d")
print(list1, list2,list3)
# ['a', 'b', 'c', 'd'] ['a', 'b', 'c'] ['a', 'b', 'c']
print(id(list1), id(list2),id(list3))
# 113196712 113196104 113196936

例4

浅拷贝, 只会拷贝第一层, 第二层的内容不会拷贝

list1 = ["a", "b", "c", [1, 2, 3]]
list2 = list1.copy()
list1[3].append(4)
print(list1, list2)
# ['a', 'b', 'c', [1, 2, 3, 4]] ['a', 'b', 'c', [1, 2, 3, 4]]
print(id(list1), id(list2))
# 1386655149640 1386655185672

例5

深拷贝

import copy
list1 = ["a", "b", "c", [1, 2, 3]]
list2 = copy.deepcopy(list1)
list1[3].append(4)
print(list1, list2)
# ['a', 'b', 'c', [1, 2, 3, 4]] ['a', 'b', 'c', [1, 2, 3]]
print(id(list1), id(list2))
# 1452762592904 1452762606664
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1."is" 和 "=="的区别是什么? == 比较的是变量的值 is 比较的是变量的内存地址 例如 : a = ...
    岁月神偷_bde8阅读 467评论 0 1
  • 赋值 对于赋值运算,就是共同指向一个内存地址,将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变...
    王镇_ee87阅读 3,570评论 0 1
  • 通过下面的输出结果可以很好的看到: 1)深拷贝是直接复制了所有的父对象跟子对象,原来的不管怎么变都跟他没关系 2)...
    龙鹰图腾223阅读 316评论 0 1
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 129,677评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 7,871评论 0 4

友情链接更多精彩内容