python 中的可变对象和不可变对象

python 中一切皆对象,每个变量都包含一个对象实例

a   =   [1,2,3]   a  变量  [1,2,3]  对象实例   

每当我们初始化一个对象时,内存会为其分配一个内存地址

当我们在python环境中输入了并执行了[1,2,3],这就是在内存中创建一个对象,但是我目前无法使用它,我们必须给将其赋值给一个变量。

 python 中的可变对象和不可变对象_第1张图片

python 中的可变对象和不可变对象_第2张图片                                              (我们将我们创建的对象[1,2,3])赋值给了变量 a,我们可以通过使用a 来达到调用对象[1,2,3]的目的。

# 查看内存为对象[1,2,3] 分配内存位置我们可以通过id() 函数用于获取对象的内存地址 print(id(a))

变量是对内存中对象的引用,变量指向对象的内存地址

python 中的可变对象和不可变对象_第3张图片

我们通过将a 赋值给了b 也可以说是,b 调用了a变量,但是所谓b 调用了a变量,其实是指b调用了实例对象 2 ,我们可以通过检查它们之间在内存存放的位置来得以证实

python 中的可变对象和不可变对象_第4张图片 

我们在python中说的可变对象和不可变对象,是指对象本身的内容是否可以发生变化。

在python 中可变对象不可变对象的数据类型分别有哪些?

  • 可变对象:list dict set
  • 不可变对象:tuple string int float bool

 我们以 不可变对象 int  为案例。

python 中的可变对象和不可变对象_第5张图片

不可变指的是,我们首先 将 a 指向了内存中 对象 1,内存为其分配了位置( id ),我们说不可变,其实是在id空间存储的对象不可变,也就是存储在   ‘1929992012016’ 位置中的数据不可修改。

下面我们来看:

a = 1

id(a)

a = 2

id (a)

如果说整数可以修改的话,当我们执行a = 2时,id(a) 返回位置信息应该和a = 1 , id(a) 返回的位置信息要一致但是显然没有

 如果是可变对象 list

 我们即便是对list对象中的数据进行了修改,但是 b 和 a 返回同样的id位置,也就是  变量b和变量a 指向内存中同一个位置。

大家可以这样理解:

有一个盒子,放置了 对象 [1,2,3], 它的标识符是 1930086882240,我们现在要将它第二数据3拿出来,放置新的数据 4 ,盒子还是原来的盒子,但是里面的数据或者内容发生了变化这既是可变对象。

如果 int 不能明确理解,我们还可以通过使用其他不可变数据类型    tuple (元组)

python 中的可变对象和不可变对象_第6张图片

如何理解这个问题请看:

python 中的可变对象和不可变对象_第7张图片   图片信息引用地址:http://t.csdnimg.cn/n21T9

我们回到我们说的 

a = 1

id (a)

a = 2

id(a)

它们返回的id (是该对象的内存地址。) 是不一样的,按不可变对象的定义理解,他们不是发生了变化吗? 明显它们返回的id 不一样,对返回id是不一样,我们所说的可变是指同一个id 下,里面的内容可变, 而不是id 可变, id 可变说明了存储为其开辟了新的内存空间它就不是原来那个盒子了,而是一个新的盒子。


 感谢各位csdn 知乎上各位it 作者对于  ”可变对象对象与不可变对象“这一概念的准确阐述,本篇文章的编写离不开各位同僚的支持,我谨代表自己向大家表示感谢

文章部分内容转载:

python可变对象与不可变对象 - Dwzb的文章 - 知乎 https://zhuanlan.zhihu.com/p/34395671

作者: Dwzb

Python对象系列1:可变对象和不可变对象 - 须臾之间的文章 - 知乎 https://zhuanlan.zhihu.com/p/337450935

作者: 须臾之间

python可变对象与不可变对象 | 酷python (coolpython.net)

作者: 酷python 


我们对a 的调用其实是对 对象 [1,2,3] 的调用

a = 1

c = a + 1

python 中的可变对象和不可变对象_第8张图片

 

你可能感兴趣的:(python进阶,1024程序员节,python)