• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python基础之赋值,浅拷贝,深拷贝的区别

    一、赋值

    不会开辟新的内存空间,只是复制了新对象的引用。所以当一个数据发生变化时,另外一个数据也会随之改变。

    二、浅拷贝

    创建新对象,其内容是对原对象的引用。浅拷贝之所以称为浅拷贝,是因为它仅仅只拷贝了第一层,即只拷贝了最外层的对象本身,内部的元素都只是拷贝了一个引用而已,即内部元素如果被修改,则另外一个数据也会发生变化。

    浅拷贝的三种形式:

    A = [1, 2, 3, 4]
    # 第1种
    B = A[:]
    # 第2种
    B = [a for a in A]
    B = list(A)
    B = copy.copy(A)

    浅拷贝要分两种情况进行讨论:

    1)当浅拷贝的值是不可变对象(例如字符串、元组、数值类型)时,和赋值情况一样,对象的内存地址(id())与浅拷贝原来的值一致。

    2)当浅拷贝的值是可变对象(例如列表、字典、集合等)时,也需要分两种情况讨论:

    首先,原来值的内存地址与拷贝后的内存地址不同。

    三、深拷贝

    深拷贝拷贝出来的对象是一个全新的对象,和原来的对象没有任何的关联。改变原有对象不会影响新的拷贝对象。

    四、例子

    import copy
    # 不可变对象
    # A = (1, 2, 'hello')   # 元组
    # A = 1                 # 数值
    A = 'hello'             # 字符串
    
    print("********赋值********")
    B = A
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    
    print("********浅拷贝********")
    B = copy.copy(A)
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    
    print("********深拷贝********")
    B = copy.deepcopy(A)
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    

    结果:

    ********赋值********
    1894005658264
    1894005658264
    hello
    hello
    ********浅拷贝********
    1894005658264
    1894005658264
    hello
    hello
    ********深拷贝********
    1894005658264
    1894005658264
    hello
    hello

    import copy
    # 可变对象
    A = [1, 2, 3]
    
    print("********赋值********")
    B = A
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    
    print("********浅拷贝********")
    B = copy.copy(A)
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    
    print("********深拷贝********")
    B = copy.deepcopy(A)
    print(id(A))
    print(id(B))
    print(A)
    print(B)
    

    结果:

    ********赋值********
    1602694308360
    1602694308360
    [1, 2, 3]
    [1, 2, 3]
    ********浅拷贝********
    1602694308360
    1602694308424
    [1, 2, 3]
    [1, 2, 3]
    ********深拷贝********
    1602694308360
    1602950316296
    [1, 2, 3]
    [1, 2, 3]

    import copy
    # 可变对象
    A = [1, 2, 3, [11, 10, 20]]
    
    # 可变对象的外层修改
    B1 = A                   # 赋值
    B2 = copy.copy(A)        # 浅拷贝
    B3 = copy.deepcopy(A)    # 深拷贝
    A.append(4)
    print("********赋值********")
    
    print(id(A))
    print(id(B1))
    print(A)
    print(B1)
    
    print("********浅拷贝********")
    print(id(A))
    print(id(B2))
    print(A)
    print(B2)
    
    print("********深拷贝********")
    print(id(A))
    print(id(B3))
    print(A)
    print(B3)
    

    结果:

    ********赋值********
    2215309238856
    2215309238856
    [1, 2, 3, [11, 10, 20], 4]
    [1, 2, 3, [11, 10, 20], 4]
    ********浅拷贝********
    2215309238856
    2215593496776
    [1, 2, 3, [11, 10, 20], 4]
    [1, 2, 3, [11, 10, 20]]
    ********深拷贝********
    2215309238856
    2215593518024
    [1, 2, 3, [11, 10, 20], 4]
    [1, 2, 3, [11, 10, 20]]

    import copy
    # 可变对象
    A = [1, 2, 3, [11, 10, 20]]
    
    # 可变对象的内层修改
    B1 = A                   # 赋值
    B2 = copy.copy(A)        # 浅拷贝
    B3 = copy.deepcopy(A)    # 深拷贝
    A[3].append(4)
    print("********赋值********")
    
    print(id(A))
    print(id(B1))
    print(A)
    print(B1)
    
    print("********浅拷贝********")
    print(id(A))
    print(id(B2))
    print(A)
    print(B2)
    
    print("********深拷贝********")
    print(id(A))
    print(id(B3))
    print(A)
    print(B3)
    

    结果

    ********赋值********
    2288591069768
    2288591069768
    [1, 2, 3, [11, 10, 20, 4]]
    [1, 2, 3, [11, 10, 20, 4]]
    ********浅拷贝********
    2288591069768
    2288847138760
    [1, 2, 3, [11, 10, 20, 4]]
    [1, 2, 3, [11, 10, 20, 4]]
    ********深拷贝********
    2288591069768
    2288847168264
    [1, 2, 3, [11, 10, 20, 4]]
    [1, 2, 3, [11, 10, 20]]

    到此这篇关于Python基础之赋值,浅拷贝,深拷贝的区别的文章就介绍到这了,更多相关Python赋值 浅拷贝 深拷贝的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python批量创建变量并赋值操作
    • python中如何对多变量连续赋值
    • Python连续赋值需要注意的一些问题
    • python模块中判断全局变量的赋值的实例讲解
    • python 使用pandas同时对多列进行赋值
    • python 实现循环定义、赋值多个变量的操作
    • python for循环赋值问题
    上一篇:python绘图subplots函数使用模板的示例代码
    下一篇:Django 实现jwt认证的示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python基础之赋值,浅拷贝,深拷贝的区别 Python,基础,之,赋值,浅,拷贝,