请列出python的至少三种不可变数据类型,python中哪些类型数据是不可变的

  请列出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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: