前言:在认识深浅拷贝的时候,先了解python中的可变类型与不可变类型。 以及 python中的传参到底是传递值还是传递引用(内存地址)

python中的可变数据类型主要有 :(列表,字典) 指的是在内存地址(id)不变的情况下,可变数据类型的‘值’是可以发生改变的,如果可变类型是 +=, append等这种操作的话只是改变了变量的值,而不会新建一个对象,还是指向的原来地址。 一句话(数据类型存储中的值是可以发生改变的)

python中的不可变数据类型: 数组、字符串、元祖。 指的是内存中存储的值是不可以发生改变的。如果值发生了改变的话,那么内存中存储的地址也会改变,就会指向一个新的对象。

栗子:

demo_list = [1, 2, 3]

print(id(demo_list)) # 4365767056

print(id(demo_list)) # 4365767056

demo_list.append(4) # 添加元素

print(id(demo_list)) # 4365767056

print("-----不可变------")

demo_tuple = (1, 2, 3)

print(id(demo_tuple)) # 4365589232

demo_tuple = (1, 2, 3, 4)

print(id(demo_tuple)) # 4365281201

python中的传参到底是传递值还是传递引用(内存地址)

python中的可变对象(字典,列表)传递的是引用(内存地址)

python中的不可变对象(字符串,数组,元祖)传递的是指值传递,也就是意味源对象时不能被修改的

1 深拷贝VS浅拷贝

浅拷贝 是对一个对象最顶层的拷贝,拷贝引用。 浅拷贝对可变类型会进行浅拷贝(拷贝一个对象的引用)。

对于不可变数据类型是对指向(对象资源的拷贝)只拷贝对象的数据内容。深拷贝有独立的内存地址

深拷贝:是对一个对象完全的拷贝(递归) 说白了就是拷贝对象的内部,不会拷贝对象的引用,各自有独立的内存地址

举个栗子:

浅拷贝就是拷贝电影名,深拷贝就是拷贝电影名指向的数据(即可以看的电影)

# list = [11, 22, 33]

# list1 = copy.copy(list) # 顶层拷贝-浅拷贝

# list.append(44)

# print(list) # 结果为:([11,22,33,44])

# print(list1) # 结果为:([11,22,33])

list = [11, 22, 33]

list2 = copy.deepcopy(list) # 深拷贝,拷贝内容,有独立的内存地址

list.append(55)

print(list) # 结果为:([11,22,33,55])

print(list2) # 结果为:([11,22,33])

# tuple = (11, 22, 33)

# tuple1 = copy.copy(tuple) # 浅拷贝,拷贝不可变类型,仅仅是指向

# print(tuple) # 结果为: (11,22,333)

# print(tuple1) # 结果为: (11,22,33)

# print(id(tuple) == id(tuple1)) # 结果为 (True)

python中的深拷贝_Python中的深拷贝和浅拷贝相关推荐

  1. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  2. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

  3. python列表对象相同_Python中的学习列表对象,List

    List(列表) 是 Python 中使用最频繁的数据类型. 列表可以完成大多数集合类的数据结构实现.列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套). 列表是写在方括号 [ ...

  4. python获取字典长度_Python中的字典

    1 字典的定义 dictionary(字典) 是 除列表以外Python之中 最灵活的数据类型 字典同样可以用来 存储多个数据 通常用于存储 描述一个 物体的相关信息 和列表的区别 列表是 有序的对象 ...

  5. python决策树 多分类_Python中的决策树分类:您需要了解的一切

    python决策树 多分类 什么是决策树? (What is Decision Tree?) A decision tree is a decision support tool that uses ...

  6. python基础知识测试题_Python中的单元测试—基础知识

    python基础知识测试题 Unit testing is the number one skill which separates people who just finished their de ...

  7. python数据库模糊查询_python中数据库like模糊查询方式

    python中数据库like模糊查询方式 在Python中%是一个格式化字符,所以如果需要使用%则需要写成%%. 将在Python中执行的sql语句改为: sql = "SELECT * F ...

  8. python redis 消息队列_python中利用redis构建任务队列(queue)

    Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...

  9. python怎么清理垃圾_Python 中的“垃圾”是怎么回收的?

    前言 对于python来说,一切皆为对象,所有的变量赋值都遵循着对象引用机制.程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性存储器中.如果 ...

  10. python中定义字符串_Python中的字符串String

    Python中除了数字(Numbers)(int,float,complex)之外,另外一种重要的类型就是字符串. 字符串是字符序列,可以由任何字符构成. 在Python语言中,字符串可以放在单引号( ...

最新文章

  1. C#中使用WCF一些常见问题及解决方案
  2. unity球体添加光源_Unity渲染路径——光源种类
  3. 武汉.NET俱乐部论坛已经恢复
  4. hdu 4587 TWO NODES 暴力枚举+tarjan
  5. mysql mongodb qps_极高的QPS - DynamoDB与MongoDB相比其他noSQL?
  6. 两台电脑cpu序列号一样_如何正确使用苹果电脑?
  7. jdk安装后提示错误
  8. 中文分词算法python_Python FMM算法的中文分词器实现方法源码
  9. ExtJs 带分页的comboBox
  10. centos7安装界面、桌面记录(ubuntu没试过)
  11. 和无用代码说再见!阿里文娱无损代码覆盖率统计方案
  12. python知识图谱关系抽取算法_知识图谱关系抽取之PCNN——tensorflow实现
  13. 免费的视频格式转换器哪个最好用呢?
  14. PCS2021:针对游戏内容的视频编码工具分析和数据集
  15. java 鸡尾酒排序_java交换排序之鸡尾酒排序实现方法
  16. macos 软件清单
  17. JavaWeb个人信息修改及修改密码
  18. Java细节:单等于号、双等于号、三等于号(js中才有)的作用及双等于号和equals(源码)的区别
  19. Lytro 一代资料.缘起
  20. 关于go在函数退出后子协程的退出问题

热门文章

  1. java系统架构师有的特质_Java中特质模式的定义
  2. netflix_学习Netflix管理员–第2部分
  3. javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)
  4. java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高
  5. junit单元测试断言_简而言之,JUnit:单元测试断言
  6. guava的正确引入方式_使用Guava的AbstractInvocationHandler正确完成代理
  7. Nutshell中的Java 8语言功能-第2部分
  8. 基于Spring的应用程序-迁移到Junit 5
  9. GC解释:收集器概述
  10. 背压加载文件– RxJava常见问题解答