栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

B10

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

B10

文章目录
      • Python中直接赋值,浅拷贝,深拷贝详解
        • 1. Python中的变量存储方式和分类
        • 2. 变量的赋值语句
        • 3. 浅拷贝
        • 4. 深拷贝

Python中直接赋值,浅拷贝,深拷贝详解 1. Python中的变量存储方式和分类
  1. Python中一切都是对象,python的变量就是一个对象的别名,它通过指针联系到对象实际的存储的地方
  2. Python中对象可以分为可变对象和不可变对象,不可变对象主要有数值,字符串,元组,不可变集合
  3. 对于不可变对象,这个变量指向的内存空间不可被改变,所以当给这变量赋值的时候,会重新开辟一块内存空间,变量再指向这个新的内存空间
  4. 对于可变对象,这个变量的值改变的时候,实际上就是所指的内存空间保存的值发生了变化,没有开辟新的内存空间,也没有发生复制行为,就是原地改变了内存空间中的值
2. 变量的赋值语句

让我们看看赋值语句 a = "Fioman",python解释器都做了什么工作


上面是变量的第一次赋值,又叫初始化,如果是不可变对象的重新赋值,则会重新开辟一段内存空间,改变它的绑定关系.比如 a = "Hammer"

如果是可变的对象,变量的赋值语句有所不同

例如 val = [1,2,3,4]

  • 结论

    1. 当普通的不可变类型(数值,字符串,元组)在初始化和赋值的时候都会重新开辟一段新的内存来保存新的值
    2. 当复杂的数据结构在赋值的时候,如果只是修改其中的元素,不会更改这个变量本身的内存地址,只是更改了复杂数据结构元素的地址.
3. 浅拷贝
  • 浅拷贝原理

    1. 浅拷贝只是拷贝了原来的对象的第一层的引用,浅拷贝变量本身的地址是一个新的
    2. 浅拷贝的内容不是新的,也就是说浅拷贝的新对象的内容和旧对象是同一个
    3. 浅拷贝只是改变了最外层变量的地址,但是这个变量里面的元素指向的是同一块内存
    4. 浅拷贝的对象和旧对象是两个独立的对象,它们的子对象还是指向了同一个对象

  • 浅拷贝常见的方式

    1. 切片赋值 val = lst[:]
    2. 各种工厂函数 set(),dict(),list(),tuple(),以及它们的copy()函数
    3. copy模块的copy()方法

4. 深拷贝
  • 深拷贝原理

    1. 深拷贝和浅拷贝一样,都会创建一个新的容器对象
    2. 和浅拷贝不同的是,深拷贝的子对象也会重新创建一个新的对象
    3. 深拷贝的对象和旧拷贝的对象,是相互独立的,双方互不影响
    4. 深拷贝的对象和旧对象会共享不可变的子对象,但是因为不可变,所以不影响它们之间的独立性

  • 深拷贝的方式

    copy.deepcopy ndarray.copy()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号