美文网首页PYTHON基础
2.深拷贝和浅拷贝

2.深拷贝和浅拷贝

作者: Stone_説 | 来源:发表于2020-12-10 23:07 被阅读0次

目录
1.浅拷贝
2.深拷贝

1.浅拷贝

1.1 "="拷贝

list_dest = list_src
完全同步,引用指向同一块内存地址

>>> lst1 = [1,[1,2,3],3]
>>> lst2 = lst1
>>> lst2
[1, [1, 2, 3], 3]
>>> lst1
[1, [1, 2, 3], 3]
>>> lst1[1][1] = 100
>>> lst1
[1, [1, 100, 3], 3]
>>> lst2
[1, [1, 100, 3], 3]
>>> lst1 == lst2
True
>>> lst1 is lst2
True
>>> id(lst1)
140057086705472
>>> id(lst2)
140057086705472
1.2 "[:]"方式复制

list_dest = list_src[:]
非引用列表复制,如果改变,遇到引用类型,复制一个应用而已

>>> lst1 = [1,[1,2,3],3]
>>> lst2 = lst1[:]
>>> lst2
[1, [1, 2, 3], 3]
>>> lst1 == lst2
True
>>> lst1 == lst2 ,lst1 is lst2
(True, False)
>>> id(lst1),id(lst2)
(139997400596416, 139997400633472)
>>> id(lst1[1]),id(lst2[1])
(139997400596352, 139997400596352)
>>> lst1[0] = 5
>>> lst1,lst2
([5, [1, 2, 3], 3], [1, [1, 2, 3], 3])
>>> lst1[1][1] = 100
>>> lst1,lst2
([5, [1, 100, 3], 3], [1, [1, 100, 3], 3])
1.3 copy方法调用

list_dest = list_src.copy(),和1.2的方式一样
同上,也是一种浅拷贝

>>> lst1 = [1,[1,2,3],3]
>>> lst2 = lst1.copy()
>>> id(lst1[1]),id(lst2[1])
(139997400634496, 139997400634496)
>>> lst1[1][1] = 100
>>> lst1
[1, [1, 100, 3], 3]
>>> lst2
[1, [1, 100, 3], 3]

2.深拷贝

list_dest = copy.deepcopy(list_src),copy模块中的deepcopy方法
二者完全不同,完全指向不同内存地址

>>> import copy
>>> lst1 = [1,[1,2,3],3]
>>> lst2 = copy.deepcopy(lst1)
>>> id(lst1[1]),id(lst2[1])
(139997400635456, 139997400808192)
>>> id(lst1),id(lst2)
(139997400808128, 139997400634432)
>>> lst1[1][1] = 100
>>> lst1,lst2
([1, [1, 100, 3], 3], [1, [1, 2, 3], 3])
>>> lst1 == lst2,lst1 is lst2
(False, False)

相关文章

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • 8.2-浅拷贝深拷贝和随机数

    清醒、自律、知进退、爱自己! 2.浅Copy与深Copy 引用、浅拷贝和深拷贝的区别 浅拷贝:影子拷贝;为了解决函...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • 深拷贝浅拷贝

    1.拷贝可变对象 深拷贝后浅拷贝可变对象,都是内存复制。 输出结果: 2.拷贝不可变对象 浅拷贝是指针拷贝,深拷贝...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • 深拷贝、浅拷贝

    深拷贝、浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了引用,并没有拷贝内容 2. 深拷...

  • 放进收藏夹,省下时间睡觉!

    1. 数组去重 2. 深浅拷贝 浅拷贝 深拷贝 假深拷贝 真深拷贝 3. 事件委托 5. 使用push和apply...

网友评论

    本文标题:2.深拷贝和浅拷贝

    本文链接:https://www.haomeiwen.com/subject/rlecgktx.html