首页 > 编程语言 >python传值以及深浅拷贝

python传值以及深浅拷贝

时间:2022-11-14 22:12:26浏览次数:57  
标签:python 创建 列表 对象 内存 拷贝 传值 引用

Python 深拷贝和浅拷贝

  • 浅拷贝:指的是重新分配一块内存,创建一个新的对象,里面的元素是原对象里的各个子对象的引用。原来变量的内存不一样。

  • 深拷贝:指的是重新分配一块内存,创建一个新的对象,并且将原对象的元素以递归方式通过创建新的子对象拷贝到新对象中,新对象和原对象没有任何关联。

  • 浅拷贝:使用数据类型本身的构造器。通过切片来操作可变类型的序列。

    • 元组不是浅拷贝,它通过切片操作,但不是浅拷贝。开辟内存存储是对原对象的引用,并没有创建新的对象来存储原对象的子对象的引用,相反它会返回一个指向相同元组的引用。
  • 和赋值的区别就是赋值把原对象的引用给新对象

对应浅拷贝来说,只是在内存中重新开辟了一个空间存放一个新列表,但是新列表中元素与原列表中的元素是公用的。

image

深拷贝deepcopy===》对于深拷贝来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的

copy2

Python值传递还是引用传递

  • Python中一切事物皆对象,变量是对对象在内存中的存储和地址的抽象。

  • python参数传递,统一都是引用传递,但是针对可变类型和不可变类型我们要区分。

    • 可变类型(list、set、dict):可修改参数值从而修改原对象的值
      • 类似于c语言中引用传递
    • 不可变类型(bumber、string、tuple):参数变量与原变量指向同一内存地址,对于不可变类型对象是无法修改原对象。
      • 重新赋值从而不影响原对象的值
      • 类似于c语言中值传递
  • 问题:python引用传递,怎么样将两变量指向不同的内存地址?

    • 通过浅拷贝深拷贝的方式!

      • 在没有copy模块,只是简单的赋值操作,修改b相当于修改a。

        a = [1, 2, 3]
        b = a
        修改b相当于修改a
        
      • 有copy模块,和deepcopy模块,两变量内存地址是不一样的。

  • 问题:浅拷贝和深拷贝的区别?

    • 对于浅拷贝:内存重新创建或开辟了一个新的空间,存放新列表,新元素中元素与原对象里的元素是公用的。

      修改其中一个变量都会影响原对象变量的值。

    • 对于深拷贝:列表在内存中重新创建或开辟了一个空间,可变数据类型是完完整整重新创建一个新对象,修改不改变原对象,互不影响,对于列表中的不可变类型的元素却是公用的

标签:python,创建,列表,对象,内存,拷贝,传值,引用
From: https://www.cnblogs.com/bjyxxc/p/16890641.html

相关文章

  • python学习第六周总结
    封装封装:就是将数据和功能'封装'起来隐藏:在类的定义阶段名字前面使用两个下划线表示隐藏。就是将数据和功能隐藏起来不让用户直接调用,而是开发一些接口间接调用,从而可......
  • PYTHON_排序
    准备分模块积累,此模块为【递推】。编写程序,输入一个包含20个整数的列表,对其中偶数下标的元素进行降序排列,奇数下标的元素不变。输出排序后的列表。(提示:使用切片。)输入样......
  • python-装饰器
    装饰器:装饰器可以用来做什么?作用:可以在不修改功能函数内部代码的情况下,给功能函数进行扩展的新功能(对开放封闭原理)1.装饰器可以给当前的功能进行扩展......
  • 力扣278(java&python)-第一个错误的版本(简单)
    题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本......
  • python 多进程 多线程 协程
    多进程-进程池1fromconcurrent.futuresimportProcessPoolExecutor23withProcessPoolExecutor(max_workers=10)asexecutor:4results=executor.map......
  • 从新开始学Python - 字符串扩展3
    字符串定义方法单引号双引号三个双引号,例如"""Python学习"""三个双引号与多行注释相同,也可以支持换行,如果不用变量接受,则为多行注释,如果用变量接受,则为字符串、......
  • 20221114-python字符串
    1.字符串定义:    2.字符串的转义符    3.字符串的拼接:      4.字符串的下标:    5.字符串的切片 ......
  • 基于TensorFlow和Python的机器学习(笔记4)
    基于TensorFlow和Python的机器学习(笔记4)    lossMSE=MeanSquaredError均方差 Entropy熵CrossEntropy交叉熵熵越大,越不稳定,惊喜度越高......
  • 用Python解析dolphinscheduler的json并存入到mysql
    第一步连接dolphinscheduler数据库SELECT*FROMdolphinscheduler2.t_ds_process_definitionWHEREproject_id=150005;把process_definition_json值的内容复制出来,保......
  • Python之requests模块-大文件上传
    最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data。需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原成......