心蓝的博客 心蓝的博客
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

心蓝

人生苦短,我用python
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • 编程基础

  • python开发环境搭建

  • 基本数据类型

    • 基本数据类型概述
    • 变量的定义和使用
    • 整数类型
    • 浮点数类型
    • 算术运算符
    • 赋值运算符
    • 字符串类型
    • 字符串常用方法
    • 字符串格式化
    • 列表类型
    • 元组类型
    • 12 可变与不可变对象
    • 13 深浅拷贝
      • 浅拷贝
      • 深拷贝
    • 14 集合类型
    • 字典类型
    • 布尔型
    • None
  • 程序流程控制

  • 函数与代码复用

  • 面向对象

  • 模块和包

  • 文件IO操作

  • python零基础入门
  • 基本数据类型
心蓝
2022-12-14
目录

13 深浅拷贝

# 深浅拷贝

Python 的赋值语句不复制对象,而是创建目标和对象的绑定关系。

>>> a = 1
>>> id(a)
140731276990112
>>> b = a
>>> id(b)
140731276990112
1
2
3
4
5
6

上面的第行代码将值1的地址绑定给变量a

id(a)返回变量a中的值的内存地址

接下来语句b = a将变量a赋值给变量b,不会创建新的值,只会把变量a指向的内存地址绑定给变量b,这样a,b指向相同的内存地址,所以它们的id()相等。

对于自身可变,或包含可变项的集合,有时要生成副本用于改变操作,而不必改变原始对象。通过copy模块可以实现浅拷贝和深拷贝。

深浅拷贝的区别仅与复合对象(即包含列表或类的实例等其他相关对象)相关:

  • 浅拷贝 构造一个新的复合对象,然后(尽可能的范围内)将原对象中找到的对象的引用插入其中。
  • 深拷贝 构造一个新的复合对象,然后,递归的将再原始对象找到的对象的副本插入其中。

# 浅拷贝

>>> import copy
>>> ls = [1, 2, ['a', 'b']]
>>> ln = copy.copy(ls)
>>> print(id(ls), id(ln))
2930321101952 2930321101056
>>> print(id(ls[2]), id(ln[2]))
2930321100736 2930321100736
1
2
3
4
5
6
7

对ls进行浅拷贝,会生成一个新的列表对象,所以ls,ln的id()不相同。然后将ls里元素的引用插入ln中,所以ls[2]和ln[2]的id()相同。

这时修改ls的第三个元素,ln也会改变。

>>> ls[2][0] = 'A'
>>> print(ls)
[1, 2, ['A', 'b']]
>>> print(ln)
[1, 2, ['A', 'b']]
1
2
3
4
5

# 深拷贝

>>> import copy
>>> ls = [1, 2, ['a', 'b']]
>>> ln = copy.deepcopy(ls)
>>> print(id(ls), id(ln))
2930321640128 2930321101952
>>> print(id(ls[2]), id(ln[2]))
2930321100480 2930321100352
1
2
3
4
5
6
7

对ls进行深拷贝,会生成一个新的列表对象,所以ls,ln的id()不相同。然后将递归的将ls里元素的副本插入ln中,所以ls[2]和ln[2]的id()不相同。

本文完,感谢你的耐心阅读,如有需要可加我微信,备注「博客」并说明原因,我们一起进步,下次见。

#python#零基础
上次更新: 2022/12/15, 21:20:30
12 可变与不可变对象
14 集合类型

← 12 可变与不可变对象 14 集合类型→

最近更新
01
requests让接口测试如此简单 原创
03-31
02
最简明的python正则教程
03-30
03
pycharm激活码
12-30
更多文章>
Theme by Vdoing | Copyright © 2019-2025 心蓝
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式