• 技术文章 >后端开发 >Python教程

    Python中赋值&浅拷贝&深拷贝的简单介绍(示例)

    不言不言2018-08-30 10:11:40原创639
    本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    在写dict数据类型时,有提到过“赋值语句”与copy()函数。
    其实说到深浅拷贝,需要考虑具体的数据类型。一部分是不可变对象,如数字、字符串;另一部分是可变对象,如列表、字典等

    一、定义解释

    二、不可变对象

    对于不可变对象,例如数字和字符串而言,赋值(=)、浅拷贝(copy())和深拷贝(deepcopy())没有区别,因为他们的对象引用永远指向同一个内存地址。
    通过例子演示:

    >>> var_1 = 123
    >>> id(var_1)            # 通过id()查看地址
    1615552144
    >>> var_2 = var_1
    >>> id(var_2)
    1615552144
    >>>
    >>> import copy        # 浅、深拷贝需要导入copy模块
    >>> var_3 = copy.copy(var_1)
    >>> id(var_3)
    1615552144
    >>>
    >>> var_4 = copy.deepcopy(var_1)
    >>> id(var_4)
    1615552144

    你会发现var_1 ~ var_4 的id指向是一样的。

    三、可变对象

    对list、dict等数据类型而言,赋值、浅拷贝和深拷贝,他们对内存地址的变化是不同的。
    赋值浅拷贝:值相等,地址相等;
    copy浅拷贝:值相等,地址不相等;
    deepcopy深拷贝:值相等,地址不相等;

    例子一:
    base[0]=’name’,是一个string,不可变对象;base[1]=[‘age’,18],是list,可变对象。
    base_1、base_2均是base的浅拷贝,三者id()一样。
    当对第一个string元素进行不同的更改时,发现id各不相同,不会互相影响,因为字符串(不可变)被显示的拷贝,当修改后,新创建了一个字符对象。
    而修改第二个list元素时,不同的修改都只对最后一次修改生效,且互相影响,因为第二个元素列表只是简单的复制了其引用,修改任何一个浅拷贝,都会修改引用的内容。

    3396782689-5b866370851d5_articlex.png

    例子二:深拷贝
    创建一个字典对象,并使用深拷贝创建一个新的对象。

    >>>import copy
    >>> var = {"a":1,"b":2,"c":[3,'abc']}
    >>> var1 = copy.deepcopy(var)
    >>> id(var),id(var1)
    (17616992, 15671136)            # 地址不相同
    >>> id(var['c']),id(var1['c'])
    (15695144, 15695384)        
    >>> id(var['c'][0]),id(var1['c'][0])
    (1615550224, 1615550224)        # ‘c’元素的内存地址是相同的
    >>>
    >>> var1['c'][0] = 4
    >>> var
    {'a': 1, 'b': 2, 'c': [3, 'abc']}
    >>> var1
    {'a': 1, 'b': 2, 'c': [4, 'abc']}
    >>> id(var['c'][0]),id(var1['c'][0])
    (1615550224, 1615550240)        # 对var1的修改没有影响var

    相关推荐:

    整理Python中的赋值运算符

    Python中的赋值、浅拷贝、深拷贝介绍

    以上就是Python中赋值&浅拷贝&深拷贝的简单介绍(示例)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Python中并发future模块的介绍(代码) 下一篇:python中Pandas的深入理解(代码示例)
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 以Python代码实例展示kNN算法的实际运用_基础知识• Windows下用PyCharm和Visual Studio开始Python编程_基础知识• 在Python中使用glob模块查找文件路径的方法_基础知识• Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例_node.js• 使用nodejs、Python写的一个简易HTTP静态文件服务器_node.js
    1/1

    PHP中文网