python3 中有六个标准的数据类型:
1、Number(数字)
2、String(字符串)
3、List(列表)
4、Tuple(元组)
5、Set(集合)
6、Dictionary(字典)
python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
看了上面的分类你会很懵,是的,博主第一次接触也是懵的(内心:????,为什么数字类型和字符串类型是不可变的)
懵逼的我们理解的:
x = 1print(x)#此处输出结果为1x = 2print(x)#此处输出结果为2
所以单纯的想法是:这不就变了吗???(还理直气壮)
于是我们打算去搜索关于Python可变类型和不可变类型,会看到这样的解释:
不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。
可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。
对于之前接触过其他编程语言的人看完后可能已经大概能理解了,心中茅塞顿开。但是对于真正的编程小白来说可能就更无法理解了(小白内心:????什么又是内存地址)
每一个数据都存放在计算机内存中,系统想调用该数据,就会自动找到存放该数据的内存,或者将新的数据写入到一块新的内存中保存。也就是说每一个数据都对应着它自己唯一的内存空间,例如虽然世界上有与你同名的人,但你们生活的家不在同一个地方,别人想找到你,可以通过你家庭地址找到你。
5.继续理解可变数据与不可变数据大概了解了内存地址与数据之间的关系后,我们进一步说明可变数据与不可变数据。按照前所述:可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。
加上对于内存地址与数据关系的理解再来看这句话,我们以列表类型为例可以理解为:
List = ["爸爸","妈妈","张三"] # 一个家庭(在一个内存块新建一个列表数据类型,类型值为["爸爸","妈妈","张三"])print("张三家的地址(内存地址)为:" , ID(List)) # 查看他家的地址(内存地址)ID(变量)函数用于查看该变量的内存地址List[2] = "张五" # 他爸觉得他名字不好听,想改名字叫王五了print("张五家的地址(内存地址)为:" , ID(List)) # 继续查看他家的地址
得到结果如下:
同样方法以元组类型为例来理解不可变数据类型
tuple = ("爸爸","妈妈","张三")# 一个家庭(在一个内存块新建一个元组数据类型,类型值为("爸爸","妈妈","张三"))print("张三家的地址(内存地址)为:", ID(tuple)) # 查看他家的地址(内存地址)ID(变量)函数用于查看该变量的内存地址tuple[2] = "张五" # 他爸觉得他名字不好听,想改名字叫王五了print("张五家的地址(内存地址)为:", ID(tuple)) # 继续查看他家的地址
运行以上代码将会报错如图所示:
再从我们最初所想的那样来看看,大家对照上面的代码仔细看看哪里不同(上面的是修改的方式,以下是以赋值的方式)
x = 1print("x = 1时的内存地址为:",ID(x))x = 2print("x = 2时的内存地址为:",ID(x))List = ["爸爸","妈妈","张三"] print("张三家的地址(内存地址)为:" , ID(List)) List = ["爸爸","妈妈","张五"] print("张五家的地址(内存地址)为:" , ID(List)) tuple = ("爸爸","妈妈","张三") print("张三家的地址(内存地址)为:", ID(tuple)) tuple = ("爸爸","妈妈","张五") print("张五家的地址(内存地址)为:", ID(tuple))
运行后得到如下结果:
由上所有的结果,相信小白们的疑惑都已经得到相应的解答,最后在此总结,Python中的可变数据类型和不可变数据类型是相对于内存而言的:
可以修改值并且对应的内存地址不变,这就是可变数据类型
不可以修改值,要想改变值,必须重新找到一块内存存储新的值,再将其赋给原变量,也就是要想改变值,必须改变地址。这就是不可变数据类型。
以上是内存溢出为你收集整理的最详细并且直观理解Python中的可变数据类型和不可变数据类型全部内容,希望文章能够帮你解决最详细并且直观理解Python中的可变数据类型和不可变数据类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)