请列出python的至少三种不可变数据类型,python中哪些类型数据是不可变的
一个问题引起的python中的可变数据类型和不可变数据类型_wx5de339d64c54e _博客的技术博客
首先我们来看两个对比。
第一个问题,当对象是整数时,最终结果:b=2,a=1,B的变化并不引起a的变化。
a=1
b=a
b=1
打印(一份)
打印(b)
结果:
一个
第二个问题,当对象是字典时,最终结果是:a={name:jack , age:27},b={name:jack , age:27},B的变化引起a的变化。
a={name: Jack}
b=a
b[年龄]=27
打印(一份)
打印(b)
结果:
{ 姓名:杰克,年龄:27}
{ 姓名:杰克,年龄:27}那么,为什么上面两个问题的结果会有这么大的差异呢?让我们来看看可变数据类型和不变数据类型。
2.可变数据类型和不可变数据类型有:list list,dictionary dict,不可变数据类型有:integer int,floating point float,string string和tuplepython。有一个id()函数可以用来获取一个对象的内存地址。对于第一个问题,我们可以看到A和b所指向的对象的内存地址发生了什么变化。
a=1
b=a
id(a)
1814284368
身份证(b)
1814284368
b=1
身份证(b)
1814284400
id(a)
114284368我们可以清楚的看到,A=1,B=A,在这两个运算中,变量A和B所指向的对象的内存地址是相同的,也就是说A和B实际上引用的是同一个对象1。那为什么integer是不可变的数据类型?这里可以理解为A和B的引用地址处的值是不可更改的,即1814284368地址处的值在被垃圾回收前始终为1,不可更改。如果B赋值为2,那么B的引用地址只能从1814284368改为1814284400,相当于b=1。这个赋值创建了一个新的对象2,然后变量A仍然指向对象1。
让我们大概画一个演示图:
图1: a=1,b=a
图2: b=1
让我们再看看字典。首先,使用id()查看内存地址的变化。
a={name: Jack}
b=a
id(a)
59071624
身份证(b)
59071624
b[年龄]=27
id(a)
59071624
身份证(b)
59071624
a
{ 年龄:27,姓名:杰克 }
b
{age: 27, name: Jack}你可以看到变量A和B同时指向一个字典对象。在向变量B指向的字典添加元素时,B指向的字典的内存地址不会改变,也就是对B的操作不会改变A引用的地址值,相当于同一地址的扩展。由于A和B指向同一个地址,B的变化将导致
图1: a={name: Jack},b=a
图2: b[年龄]=27
三。参考文章
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。