python对象的赋值

作者: 凹凸曼_ebb9 | 来源:发表于2017-06-04 22:54 被阅读0次

        接上昨天的话题,一个字典对象dict1的值赋给另一个字典对象dict2,若dict2的值发生改变,那么dict1的值也会随之改变,这与我们潜意识中的变量赋值有冲突,我觉得有必要总结一下python中对象赋值是怎么样一回事。

不可变对象的赋值

      不可变对象包括字符串,元组,字符串,先看一个简单的例子:

       简述一下过程:1、创建一个变量b,并赋值为10,再创建一个变量a,并把变量b的值赋给变量a;2、打印变量a和b的内存地址,发现其占用同一个内存地址;3、将20重新赋给变量a,然后打印b的值,发现b的值并没有随着a改变。为什么呢?其实可以这样理解:对于python来讲,变量的赋值其实是创建新变量的过程,变量a被重新赋值为20后,其实是内存为其新分配了一个地址,称为了一个全新的变量,而原来的那个变量a被python的垃圾处理机制所回收,我们重新打印a和b所占用的内存地址,发现确实如此:

     也可以用下面的图进行解释:

    因此,对python不可变对象的赋值根据理解总结如下:

    1、python的不可变对象赋值也就是现在内存中创建存储这个值的地址空间,再用一个标识来代表它。

    2、python不可变对象的传递其实就是引用的传递。

    3、创建新值就是创建新的内存,也即创建新的对象。

可变对象的赋值

      那么对象的赋值又有何不同,同样举一个简单的例子:

     简述一下上述过程:1、创建一个列表list1;2、把list1值赋给list2;3、在list1中增添一个元素;4、打印list2的值,发现list2的值也随之发生了改变。

      打印list1和list2的内存发现其占用同一个内存地址。

    同样可以用如下的图进行解释:

    因此对可变对象的赋值做如下总结:

    1、可变对象的改变只是改变对象的内容,而不改变其占用的内存地址。

    2、对象的赋值只是引用的传递,引用永远指向对象所在的内存地址。

   

相关文章

  • python直接赋值、深拷贝和浅拷贝

    python中,对象赋值实际上是对象的引用。当创建一个对象,将其赋值给另一个变量,python并没有拷贝这个对象,...

  • 浅拷贝与深拷贝

    0.名词解释 1.赋值 python中的赋值是对象的引用,python并没有拷贝这个对象,只是指向了被引用对象的内...

  • Python死磕——Python赋值语句、表达式以及打印

    Python赋值语句 Python中的赋值语句的基本形式是在等号左边写赋值语句的目标。要赋值的对象位于右侧。左侧的...

  • Python3 & 浅拷贝与深拷贝

    在Python中对象的赋值(=)其实就是对象的引用。即:当创建一个对象,把它赋值给另一个变量时,python并没有...

  • Python对象的引用,深拷贝和浅拷贝

    前言 在Python中,Python对象的赋值,深浅拷贝之间是有差异的,今天就来总结一下三者之间的区别. 对象赋值...

  • python对象的赋值

    接上昨天的话题,一个字典对象dict1的值赋给另一个字典对象dict2,若dict2的值发生改变,那么dict1...

  • 赋值、浅拷贝、深拷贝

    一. 赋值: 在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同赋值: 完全复制,内存地址一样...

  • 拷贝Python对象

    赋值 Python中对象的赋值是简单的对象引用(可以把这个对象看成一个盒子,赋值是给这个盒子上贴不同的标签,指向的...

  • python浅拷贝和深拷贝

    在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这...

  • python3浅拷贝和深拷贝

    在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这...

网友评论

    本文标题:python对象的赋值

    本文链接:https://www.haomeiwen.com/subject/sfvvfxtx.html