当前位置:首页>python>python 深拷贝

python 深拷贝

  • 2026-10-11 06:13:31
python 深拷贝

一. 前言

        在操作变量与数据的时候,我们会直接进行赋值a = b(把b赋值给a),但在a改变的时候,b也改变,怎么才能避免这种情况出现那,我们可以使用python自带的copy()与deepcopy()来进行处理。

二. 可变与不可变数据的认识

        mutable : 可变的,如List、Dict

        immutable : 不可变的,如Number、String、Tuple、Set

        Python赋值操作或函数参数传递,传递的永远是对象引用(即内存地址),而不是对象内容。

三. copy模块的学习

        (1)浅拷贝只拷贝最外层对象,深拷贝还会递归拷贝内层对象。

        (2)无论是浅拷贝还是深拷贝,只拷贝mutable可变对象成为一个新对象,而immutable不可变对象还是原来的那个。

        (3)当顶层对象和它的子元素对象全都是immutable不可变对象时,因为没有产生新对象,所以不存在被拷贝。

       3.2 深拷贝

        递归拷贝顶层对象,以及它内部的子元素对象

                3.2.1顶层是mutable,子元素全是immutable

        输出结果:

                 3.2.2顶层是mutable,子元素部分immutable

import copy
'''
整体id地址不同,内部不可变子元素地址一样,可变子元素地址不同
修改可变子元素深拷贝的对象不会变化
'''

        输出结果:

                3.2.3顶层是immutable,子元素全是immutable

      输出结果:

                3.2.3顶层是immutable,子元素部分mutable

import copy

'''

整体id地址不同,内部不变子元素地址一样,可变子元素id不一样

修改a[2],b[2]值不变

'''

        输出结果:

总:整体深拷贝的学习可以结合目录三.copy模块学习下的(1)(2)(3)进行对照学习。

最新文章

随机文章