最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:11:49
文档

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

Python中赋值&浅拷贝&深拷贝的简单介绍(示例):本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在写dict数据类型时,有提到过赋值语句与copy()函数。其实说到深浅拷贝,需要考虑具体的数据类
推荐度:
导读Python中赋值&浅拷贝&深拷贝的简单介绍(示例):本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在写dict数据类型时,有提到过赋值语句与copy()函数。其实说到深浅拷贝,需要考虑具体的数据类
 本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

一、定义解释

  • 变量:一个系统表的元素,指向对象的连接空间。

  • 对象:被分配的一块内存,存储其实际的值。

  • 引用:从变量到对象的指针。

  • 不可变对象:一旦创建就不可以修改,如数字、字符串、元组。

  • 可变对象:可以修改的对象,如列表、字典。

  • 赋值:通过语句“=”实现。左边是新建的变量,右边可以是直接内容,或者已存在的变量。是对象的引用,Python没有拷贝该对象,只是拷贝了对象的引用,新变量指向源变量内存地址。

  • 浅拷贝:对一个对象进行拷贝。拷贝最外围的对象本身,内部的元素都只是拷贝了一个引用而已。即新创建了一个类型跟原对象一样、内容是原对象的引用。【浅拷贝对象是新的,对象的引用内容是旧的。】
    浅拷贝实现的几种方式:(1)切片:[:];(2)工厂函数,比如list()、dict();(3)使用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元素时,不同的修改都只对最后一次修改生效,且互相影响,因为第二个元素列表只是简单的复制了其引用,修改任何一个浅拷贝,都会修改引用的内容。

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

    >>>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中赋值&浅拷贝&深拷贝的简单介绍(示例)

    Python中赋值&浅拷贝&深拷贝的简单介绍(示例):本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在写dict数据类型时,有提到过赋值语句与copy()函数。其实说到深浅拷贝,需要考虑具体的数据类
    推荐度:
    标签: python 赋值 深拷贝
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top