List浅拷贝和深拷贝图解

简介: List浅拷贝和深拷贝图解

前言

List浅拷贝和深拷贝图解


一、浅拷贝

1、创建一个List_var1的列表

list_var1 = [1, 2, 3, 4]

8c248b96a04f42099dac5e62752b0688.png

2、将其复制给List_var2

list_var1 = [1, 2, 3, 4]
list_var2 = list_var1

5c765cfe2add43768d309e9cb4e9a10f.png

这里我们可以看到它和List_var1指向同一个内存地址

所以List_var1改变List_var2也改变

例如:

给List_var1添加一个元素

2791d33ae5f744c1b089d3c01c599c43.png

3、使用浅拷贝让List_var2不随着List_var1的改变而改变

list_var1 = [1, 2, 3, 4]
list_var2 = list_var1
list_var1.append(5)
list_var3 = copy(list_var1)

此时这里多了一个list_var3的变量,它指向的是一个新的列表

2221cc1fc91147efa6db0864ce0c17ca.png

当我们再次改变list_var1 的时候list_var3是不会发生改变的

list_var1 = [1, 2, 3, 4]
list_var2 = list_var1
list_var1.append(5)
list_var3 = copy(list_var1)
list_var1.append(6)

我们可以看出list_var3并没有改变,list_var3创建了一个新的内存地址

dcb56b91e56940c7aa0bac2274c7739e.png

4、但是当list_var1中含有可变元素的时候这时候list_var3就会发生改变

list_var1 = [1, 2, 3, 4,[10,20]]
list_var2 = list_var1
list_var1.append(5)
list_var3 = copy(list_var1)
list_var1.append(6)

list_var3在浅拷贝的时候会将这个可变的元素指向同一个内存地址

这样减少了内存的开销

5daf015ea79a49108218a7e7f4e9359f.png


将可变元素改变,list_var3发生改变 list_var1[4].append(30)77be8ab47355493383721d8df71f5f02.png

总结:当使用浅拷贝的时候,存在可变数据类型的时候,这个可变数据发生变化浅拷贝的这个数据也会发生改变


二、 深拷贝

1、接上面,使用深拷贝让这两个列表(list_var1和list_var3)没有关系

list_var1 = [1, 2, 3, 4,[10,20]]
list_var2 = list_var1
list_var1.append(5)
list_var3 = copy(list_var1)
list_var1.append(6)
list_var4 = deepcopy(list_var1)

这里list_var4 会重新开辟一个内存空间和list_var1没有任何关系

9c855583909c4b87a1bc6cd7861000e2.png

验证list_var1发生改变时list_var4不变

list_var1 = [1, 2, 3, 4,[10,20]]
list_var2 = list_var1
list_var1.append(5)
list_var3 = copy(list_var1)
list_var1.append(6)
list_var4 = deepcopy(list_var1)
list_var1[4].append(50)

这里给list_var1添加元素,list_var4未发生改变

9e2ecd2779ed4bf2b5aab79dc8979f96.png

总结:

深拷贝拷贝的所有的对象

浅拷贝只拷贝父对象

相关文章
|
8月前
|
存储 人工智能 前端开发
深拷贝浅拷贝的区别?如何实现一个深拷贝?
深拷贝浅拷贝的区别?如何实现一个深拷贝?
115 0
|
3月前
|
存储 前端开发 JavaScript
浅拷贝和深拷贝的区别?
本文首发于微信公众号“前端徐徐”,介绍了JavaScript中浅拷贝和深拷贝的概念及其实现方法。文章首先解释了数据类型的基础,包括原始值和对象的区别,然后详细介绍了浅拷贝和深拷贝的定义、底层逻辑以及常见的实现方式,如 `Object.assign`、扩展运算符、`JSON.stringify` 和手动实现等。最后,通过对比浅拷贝和深拷贝的区别,帮助读者更好地理解和应用这两种拷贝方式。
133 0
浅拷贝和深拷贝的区别?
|
7月前
|
安全 Java
深拷贝和浅拷贝的区别
深拷贝和浅拷贝的区别
|
算法 前端开发
算法练习--深拷贝与浅拷贝
深拷贝与浅拷贝
77 0
|
8月前
|
JSON JavaScript 前端开发
深拷贝的3种常用方法
`深拷贝是一种保持数据独立性和完整性的重要手段,在许多场景下都是不可或缺的操作。
|
8月前
|
存储 Java Apache
【面试问题】深拷贝和浅拷贝的区别?
【1月更文挑战第27天】【面试问题】深拷贝和浅拷贝的区别?
|
编译器 C++
【C++】 --- 深拷贝与浅拷贝
【C++】 --- 深拷贝与浅拷贝
73 0
【C++】 --- 深拷贝与浅拷贝
|
存储 JavaScript 前端开发
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
106 0
|
JavaScript 前端开发 Java
一文搞懂浅拷贝与深拷贝到底有什么区别
一文搞懂浅拷贝与深拷贝到底有什么区别
169 0
|
存储 JavaScript 前端开发
每日一题:深拷贝浅拷贝的区别?如何实现一个深拷贝?
每日一题:深拷贝浅拷贝的区别?如何实现一个深拷贝?
180 0
每日一题:深拷贝浅拷贝的区别?如何实现一个深拷贝?