首页 > 其他分享 >浅拷贝与深拷贝

浅拷贝与深拷贝

时间:2022-11-09 10:37:20浏览次数:34  
标签:copy lst1 lst 拷贝 内存地址 append

赋值:多个变量名指向同一个内存地址

#情况1
a = 10
b = 10
c = 10
#情况2
a = 10
b = a
c = b

在程序这样写,内容空间发生的变化就是下图:

lst = [1,2,3,[6,7,8]]

image-20190624164715237

赋值:

#元素的添加对赋值对象都有影响
lst1 = lst
lst[-1].append(9)

image-20190624164938391

一个列表用两个标签,通过标签lst 和lst1找到的是同一个,图中的那一长串数字就是内存地址,Python中是通过内存地址来查看值的;我们通过lst这个标签添加一个9,再通过lst1找到这个列表也就多了一个9 因为lst和lst1都是贴在一个地方

浅拷贝:

浅拷贝就是只拷贝第一层的元素,浅拷贝只把原列表中记录的内存地址拿到一个新开辟的列表中

lst = [1,2,3,[6,7,8]]
#lst2 = lst[:] 浅拷贝的另一种书写形式
lst2 = lst.copy() 
lst.append(9)

image-20190624170320641

#执行如下代码,元素的添加对浅拷贝对象的第一层没有影响
lst = [1,2,3,[4,5,6]]
lst1 = lst.copy() #浅拷贝

lst.append(7)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6], 7] [1, 2, 3, [4, 5, 6]]

lst[-2].append(8)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6, 8], 7] [1, 2, 3, [4, 5, 6, 8]]

深拷贝:

import copy
lst = [1,2,3,[6,7,8,9]]
lst2 = copy.deepcopy(lst)

image-20190624172845500

#执行如下代码,元素的添加对深拷贝对象都没有影响
import copy
lst = [1,2,3,[4,5,6]]
lst1 = copy.deepcopy(lst) #深拷贝

lst.append(7)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6], 7] [1, 2, 3, [4, 5, 6]]

lst[-2].append(8)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6, 8], 7] [1, 2, 3, [4, 5, 6]]

标签:copy,lst1,lst,拷贝,内存地址,append
From: https://www.cnblogs.com/vahan/p/16872708.html

相关文章

  • 深拷贝与浅拷贝一次弄通
    JavaScript中存在两大数据类型:基本类型引用类型基本类型数据保存在在栈内存中引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存中实际对象的引用,......
  • day26 Vue相关内容及深拷贝和浅拷贝
    Vue相关内容概述:Vue是前端的一个Js库(诞生于2015年,兴起于2016年,尤雨溪写的(目前是阿里巴巴在维护)),vue是MVVM模式的框架.MVVM概述:model数据v......
  • 创建型设计模式-原型模式(深拷贝,浅拷贝)
    Person类:publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}publicAddressAddress{get;set;......
  • 编写成功的椭圆latex底稿,可以直接拷贝。注意文章中有图片ellipse.png需要复制到文章所
    %注意,本文为了在数学公式中使用中文,调用了xeCJKsetup{CJKmath}所以,不能用pdfLatex编译器,要用Xelatex编译器,否则报错。即,在编译器左上角的绿色箭头右侧下拉框里,选择Xelatex.......
  • 死磕Java面试系列:深拷贝与浅拷贝的实现原理
    深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要......
  • 深拷贝,浅拷贝
    浅拷贝:如果拷贝的是一个基本数据类型则拷贝的是值,如果是引用数据类型则拷贝的是内存地址,一个改变其他另一个也跟着改变常见的浅拷贝有:展开运算符,Object.assign(),Array.pro......
  • Java的List之坑系列--ArrayList的浅拷贝问题
    简介    本文介绍ArrayList的浅拷贝问题的原因和解决方案。    问个问题:先newArrayList创建了list1并用add添加对象,再newArrayList创建了list2,然后list2.......
  • day26 Vue相关内容浅拷贝和深拷贝
    概述:Vue是前端的一个js库(诞生于2015年兴起于2016年尤雨溪(阿里巴巴)),vue是一个MVVM模式的框架。MVVM概述model数据view视图viewmodel视图模型(管理数据驱动视......
  • C# 深拷贝
    测试实体:classTest{publicintAge{get;set;}=1;publicstringSex{get;set;}="男";publicNameName{get;set;}=newName(){Name_......
  • C++浅拷贝与深拷贝
    ​目录 前言一、区别二、浅拷贝1.简单描述2.代码实例三.深拷贝1.简单描述2.代码实例 四.完整代码五.运行结果总结  前言C++中有两种拷贝:深拷贝和浅......