美文网首页
python可变数据类型vs不可变数据类型

python可变数据类型vs不可变数据类型

作者: 全村希望gone | 来源:发表于2020-07-09 13:27 被阅读0次

前言

今天和师弟一起讨论问题,学到了很多,遂记录一下,也明白了一个人绝对不可能学完所有的知识,多和别人沟通是非常有效的学习方式!

问题起源:数组赋值

a=[1,2,3]
b=a
b[0]=5
print(a)

猜猜看 a 输出是多少?

a=[5,2,3]

再来看一个

a=1
b=a
b=5
print(a)

猜猜看 a 输出是多少?

a=1

为什么会出现这样的情况呢?同样是修改b,为什么列表的a变了,而int的a不变呢?
首先我们要明白在python中存在可变和不可变数据类型,可变数据类型有列表和字典,不可变数据类型有整型、字符、字符串、元组。可变和不可变的意思是什么,区别是什么呢?

a=[1,2,3]
b=[1,2,3]
c=1
d=1
print(id(a)==id(b))
print(id(c)==id(d))

运行这段代码会发现,第一个输出False,第二个输出True,这就可以看出区别了,对于整型变量而言,只要它们的值相同,那么无论有多少个变量指向这个值,这些变量的id都相同,但是对于列表而言,值相同,变量的id不一定相同。但是用“=”赋值,“=”两边的变量的地址是一样的,指向的内容也是一样的,所以你无论如何改变列表中的元素值,最终这两个变量的地址都指向同一个列表,这就解释了上面改变一个列表的元素,另一个列表为什么也变了。而对于整型数据,只要内容不一样,那么变量的地址一定不一样,所以你让b=5之后,b有新的地址,已经不指向1了,而a仍然指向1,所以改变b无法影响a。也就是说最关键的在于可变和不可变的理解,不可变数据类型指的是相同的值无论有多少个变量指向它,变量的id都是相同的(但是元组并不是这样,我也不知道为什么),而可变数据类型则是不同的变量指向相同的值,它们的id也不相同。

参考资料

[1] Python的可变与不可变数据类型

相关文章

  • 2019-05-01派森学习第163天

    21、列出python中可变数据类型和不可变数据类型,并简述原理 不可变数据类型:数值型、字符串型string和元...

  • python面试题(二)

    1、列出python中可变数据类型和不可变数据类型,并简述 不可变数据类型:数值型、字符串型string和元组tu...

  • 列表

    Python中的数据类型:数字(不可变)、字符串(不可变)、列表(可变)、元祖(不可变)、字典(可变)、集合 容器...

  • 2018年6月19日【python学习笔记】

    列表 python中的数据类型:数字(不可变)、字符串(不可变)、列表(可变)、元祖(不可变)、字典(可变)、集合...

  • python 的可变数据类型和不可变数据类型

    python 的数据类型?数值类型、字符串、元组、列表、字典、集合(不常用) 2.可变数据类型 和 不可变数据类型...

  • 三、Python高级

    1 Python里的拷贝 1.1 顶层对象为不可变数据类型 1.1.1 子元素都为不可变数据类型 1.1.2 子元...

  • Python 面试高频问题:可变数据类型和不可变数据类型的区别

    Python可变数据类型和不可变数据类型是一个基础而且重要的考点。简单地说:这里的可变和不可变是指当变量改变的时候...

  • 2019-01-03

    Day 8 一、 元组(tuple) 1、python中容器数据类型,不可变且有序。 元组就是不可变的列表不可变:...

  • python字符串基础操作

    字符串基础操作 Python的数据类型可以分为可变数据类型(列表和字典)和不可变数据类型(整型、浮点型、字符串、布...

  • python的可变和不可变数据类型

    不可变数据类型 python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也...

网友评论

      本文标题:python可变数据类型vs不可变数据类型

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