一.引言

在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. Variable|quantitative variables|continuous variable|discrete variable|qualitative variables| observation|data set

    2.1Variables and Data Variable:某物或某人的某一特征和其他个体不同. quantitative variables:定量变量either discrete (可以被数)o ...

  2. PostgreSQL中实现更新默认值(二)

    今天我们用表继承+触发器的方案,来实现表中的更新默认值.这也许是PostgreSQL里最佳的解决方案. 一. 创建一张表,作为父表 create table basic_update( t_updat ...

  3. [LC] 557. Reverse Words in a String III

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  4. ssh 怎样以root用户登录

    #sudo vim /etc/ssh/sshd_config 找到并用#注释掉这行:PermitRootLogin prohibit-password 新建一行 添加:PermitRootLogin ...

  5. python后端面试第八部分:制作简历和如何面试--长期维护

    ###############     就业指导    ################ 这里面有套路,你懂了这个套路,你会找到更好的工作,你会更快的找到工作, ,如何制作简历,五颗星 ,如何投递简历 ...

  6. [LC] 246. Strobogrammatic Number

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  7. volatile与Synchronized

    摘自: https://blog.csdn.net/zxh476771756/article/details/78685581 一.JVM内存模型: JVM将内存组织为主内存和工作内存两个部分. 主内 ...

  8. Java包装类之实体类不要使用基本类型

    [color=rgba(0, 0, 0, 0.75)]今天来记录一下,在项目中因为基本类型,所产生的bug.**U•ェ•*U** 包装类:8种基本类型的包装类 应用场景:数据库建立实体映射多用包装类 ...

  9. DIP|PCN|CoevDB|PID|Y2H|RosettaDock Serve|元基因组学|微生物多样性

    生命组学: 比较真核生物有关呼吸链的gene是比较核外编码基因,因为与呼吸有关的功能在线粒体上,线粒体位于核外.想要查看两种基因是否具有相互作用,可以对不同物种的编码ATP6 和ATP8的直系同源基因 ...

  10. 科学家用AI看月球后,却发现了这些东西

    ​​人工智能(AI)几乎已经无所不在,我们生活的大多数方面都已经被它们渗透,随着AI在过去几年取得的令人震惊的进步,它在许多方面都可能帮助我们的生活变得更美好.近日,AI在月球上发现了近7000个未被 ...