python中对象赋值、引用与拷贝的理解与应用

一、赋值与引用

当你将一个变量赋值给另一个变量时,实际上是将一个对象的引用(内存地址)赋给了另一个变量,而不是创建了一个新的对象。因此,这两个变量将指向相同的内存地址,修改其中一个变量的值将会影响另一个变量的值。这适用于可变对象和不可变对象。

示例:

a = [1, 2, 3]
b = a  # b引用了a的内存地址
b[0] = 5
print(a)  # 输出:[5, 2, 3]
print(b)  # 输出:[5, 2, 3]

二、拷贝创建副本

有时你想要复制一个对象而不是共享它,改变其中一个的值,另一个的值不受影响。这时候你可以创建一个副本。Python提供了多种方式来创建副本,包括切片操作、使用列表的copy()方法以及使用copy模块中的copy()函数。

注意:copy()方法只会创建一个浅拷贝,即只会复制顶层对象,而不会递归地复制嵌套对象。

示例:

#切片
a = [1, 2, 3]
b = a[:]  # 使用切片操作创建a的副本给b
b[0] = 5
print(a)  # 输出:[1, 2, 3]
print(b)  # 输出:[5, 2, 3]

###########################################
#使用copy
import copy

a = [1, 2, 3]
b = a.copy()  # 使用列表的copy()方法创建a的副本给b
b[0] = 5
print(a)  # 输出:[1, 2, 3]
print(b)  # 输出:[5, 2, 3]

三、深度拷贝

有时候对象是嵌套的,而你想要创建一个完全独立的副本,即使原始对象是嵌套的,也不想共享任何内部对象。这时候你需要使用深度拷贝。深度拷贝会递归地复制所有嵌套对象。

示例:

import copy

a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)  # 使用深度拷贝创建a的副本给b
b[0][0] = 5
print(a)  # 输出:[[1, 2], [3, 4]]
print(b)  # 输出:[[5, 2], [3, 4]]

相关推荐

  1. python对象赋值引用拷贝理解应用

    2024-03-29 07:34:02       44 阅读
  2. c++对象拷贝对象实例拷贝

    2024-03-29 07:34:02       60 阅读
  3. Python对象:深入理解应用

    2024-03-29 07:34:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 07:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 07:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 07:34:02       82 阅读
  4. Python语言-面向对象

    2024-03-29 07:34:02       91 阅读

热门阅读

  1. 护网行动HW中的蓝队和红队的区别和关系?

    2024-03-29 07:34:02       42 阅读
  2. YTU 3379

    2024-03-29 07:34:02       40 阅读
  3. 在Vue中创建生产和开发环境

    2024-03-29 07:34:02       46 阅读
  4. python-numpy-常用函数详解

    2024-03-29 07:34:02       38 阅读
  5. 久菜盒子|毕业设计|金融|DCC-GARCH模型

    2024-03-29 07:34:02       42 阅读
  6. OpenCV图像滤波、边缘检测

    2024-03-29 07:34:02       37 阅读