深拷贝与浅拷贝

Posted mofujin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。

  一、浅拷贝

 l1 = [1,2[1,2]]

l1 = [1, 2, [1,2]]
# 分析深浅拷贝

    浅拷贝对于不可变的是的数据类型是指针指向沿用原来的,对可变的数据类型还是沿用原来的对象,所以外不可变的数据类型不会相互改变这一点和

深拷贝也是一样的,而不同的是浅拷贝对于可变的数据类型是沿用而不是重新指向一个新的列表,所以会相互影响相互牵制。一个改变变可变类型也会改变另一个的内部值。

 

内部的值相互可以改变,也就是一方改另一方也随之改变,外部的值为不可变数据类型,指针还是指向原来的值

# 2.区别深浅拷贝
# l1[0] = 222
# print(l1,id(l1))  # [222, 2, [‘al‘, ‘js‘]] 2130503833736
# print(l3,id(l3))
# [222, 2, [‘al‘, ‘js‘]]  # [1, 2, [‘al‘, ‘js‘]] 2130503843720
# [1, 2, [‘al‘, ‘js‘]]

 

# l3[0] =333
# l3[2][0] = ‘xx‘
# print(l1)
# print(l3)

# [1, 2, [‘xx‘, ‘js‘]]
# [1, 2, [‘xx‘, ‘js‘]]
l4 = copy.deepcopy(l1)  # >>>深拷贝id也会变
# 2.
# l1[0]=222
# l1[2][1] = ‘ss‘
# print(l1)
# print(l4)

# l4[2][0] = 33
# print(l1)
# print(l4)
# l1[2][1] = 44
# print(l1)
# print(l4)
# [1, 2, [1, 44]]
# [1, 2, [1, 2]]

 

技术图片

 

 

  深拷贝是对于不可变数据类型是指针指向,而对于可变的数据类型,是重新开一个类型重新指向,值还是沿用原指针指向的值,不同的是可变的数据类型之间不再相互随着改变而改变。

  

 技术图片

 

  

以上是关于深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

深拷贝与浅拷贝的实现(一)

JavaScript深拷贝与浅拷贝

深拷贝与浅拷贝

深拷贝与浅拷贝详解

面试深拷贝与浅拷贝的实现原理

深拷贝与浅拷贝的区别,实现深拷贝的几种方法