一.引言

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

针对该列表l1=['a','b','c',['d','e','f']]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝

注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的

1.1 可变或不可变

  • ID不变值可变,即在原值的没基础上修改,则为可变数据类型

  • 值遍ID也变,即重新申请一个空间放入新的值,则为不可变数据类型

age = 19
print(f'first:{id(age)}')
age = 20
print(f'second:{id(age)}') #first:270493056
#second:270493072

二.拷贝

如果L2是L1的拷贝对象,那么L1内部任何元素的变化,L2也会随之改变,因为可变类型id值id不变

l1 = ['1','2','3','4']
l2 = l1
l1.append('g')
print(l1)
print(l2) #['1', '2', '3', '4', 'g']
#['1', '2', '3', '4', 'g']

三.浅拷贝

  • 如果L2是L1的浅拷贝对象,则L1内的里不可变元素发生了改变,L2 不变

  • L1内的可变元素发生了改变,则L2会跟着变

import  copy

l1 = ['1','2','3',['4','5']]
l2 = copy.copy(l1) l1.append('6')
print(l1)
print(l2) #['1', '2', '3', ['4', '5'], '6']
#['1', '2', '3', ['4', '5']] l1[3].append('7')
print(l1)
print(l2) #['1', '2', '3', ['4', '5', '7'], '6']
#['1', '2', '3', ['4', '5', '7']]

深拷贝

如果l2是l1的深拷贝对象,那么:

  • l1内的不可变芫荽发生了改变,l2不变

    l1内的可变元素发生了改变,l2叶不变

    即:l2不会随l1改变而改变

import copy

l1 = ['1','2','3',['4','5']]
l2 = copy.deepcopy(l1) l1.append('6')
print(l1)
print(l2) #['1', '2', '3', ['4', '5'], '6']
#['1', '2', '3', ['4', '5']] l1[3].append('7')
print(l1)
print(l2) #['1', '2', '3', ['4', '5', '7'], '6']
#['1', '2', '3', ['4', '5']]

46-Python深浅拷贝的更多相关文章

  1. Python开发【第二章】:Python深浅拷贝剖析

    Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...

  2. 小学生都能学会的python(深浅拷贝)

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  3. 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝

    一.数据类型分类 二.Python深浅拷贝

  4. 底层剖析Python深浅拷贝

    底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...

  5. 关于python深浅拷贝的个人浅见

    起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...

  6. python深浅拷贝与赋值

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  7. python 深浅拷贝 进阶

    主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝 先说说赋值,事实上python中的赋值事实上是赋值了一个引用.比如: foo1=1.0 foo2=foo1 用操作符is推断时.你能够发现结果是tr ...

  8. python深浅拷贝&垃圾回收&上下文管理(with语句)

    深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...

  9. 关于Python深浅拷贝

    拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...

  10. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

随机推荐

  1. [SDOI2019]染色(DP)

    好神的题啊! 看了这题只会第一个subtask,又参考了HN-CJ鸽王zsy的题解,实在太菜了. 暴力转移是O(nc2),很显然没有分.考虑子任务1,2,只需要转移包含已染色格子的列,然后状态数只有O ...

  2. [HNOI2019]序列(单调栈+二分)

    通过打表证明发现答案就是把序列划分成若干段,每段的b都是这一段a的平均数.50分做法比较显然,就是单调栈维护,每次将新元素当成一个区间插入末尾,若b值不满足单调不降,则将这个区间与单调栈前一个区间合并 ...

  3. .net core ioc

    -------------------------------------- 2. ---------------------------- -----------aop

  4. idea转eclipse快捷键

    1.打开idea,点击上方菜单栏中的File, 2.在弹出的setting页面中左侧导航中选择Keymap:在keymaps下拉列表中选择Eclipse:如果想要使用这个快捷键风格,则点击右侧的cop ...

  5. VB.NET XOR 运算

    C# 里面的 ^ 运算符,在VB.NET中可以用 XOR 表示,但是 byte x=(byte)(65535^254); 直接翻译成 dim x as Byte=CByte(65535 XOR 254 ...

  6. python爬虫和数据分析、数据挖掘

    一.python爬虫脑图: 二.python爬虫流程: 三.python数据分析简介 四.python数据预处理方法 五.python数据挖掘 六.数据探索基础

  7. 2.Redis数据类型

    Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: 字符串 Hash类型 List Set SortedSet(zset) 注:在redis中的命令语句中,命令是忽略 ...

  8. iOS燃烧动画、3D视图框架、天气动画、立体相册、微信朋友圈小视频等源码

    iOS精选源码 iOS天气动画,包括太阳,云,雨,雷暴,雪动画. 较为美观的多级展开列表 3D立体相册,可以旋转的立方体 一个仪表盘Demo YGDashboardView 一个基于UIScrollV ...

  9. Qt 无法打开包括文件:“QGLWidget”: No such file or directory

    只需要在.pro文件中加上 QT += opengl 然后再执行qmake即可

  10. Vue+elementUI build打包部署后字体图标丢失问题

    错误描述:Vue+elementUI  build打包部署后字体图标丢失,控制台显示文件element-icons.woff和element-icons.ttf文件404 错误展现: 控制台报错截图 ...