python基础(六):可变与不可变类型、字典中k-v类型限制

一、定义

可变类型:值改变,id不变,证明了改变的是原值,证明原值是可以被改变
不可变类型:值改变,id改变,证明是产生的新值,并没有改变原值,证明原值是不能被改变

二、验证

1、int

x = 10
print(id(x))
x = 100
print(id(x))

在这里插入图片描述id不一致故为不可变类型!

2、str

str = 'abc'
print(id(str))
str = 'defx'
print(id(str))

在这里插入图片描述id不一致故为不可变类型!
float、布尔类型都是不可变类型,可以自己去试此处就不再多说

3、list

a = [1,2,3,4,5]
print(id(a))
a.insert(0,100)
print(id(a))

在这里插入图片描述列表就是可变类型。
看内存图解:
在这里插入图片描述你看我们只会改变列表中存的东西,a的直接引用的地址0xfff00001并没变。还有就是列表中存的元素内存地址不是连续的。

三、总结

  • int、float、str、布尔这些类型的数据都被设计成了不可分割的整体,不能够被改变。
  • 容器类型(例如列表、字典等)大部分都是可变类型,但也有例外,比如元组和str,str其实我认为也可以看作一个容器,因为它也有索引,元组和str都没有可以在原元组和原字符串上进行操作的方法(比如插入、追加等操作),所以它是不可变类型。
  • 无论什么类型,容器也好、int、str等数据类型也好,它们只要重新赋值,其id都一定会变。当然本条总结和可变和不可变的判断没有关系,可变都是能对其本身进行操作。无法对其本身操作就是不可变。

无法对其本身操作就是不可变,怎么理解:

a = 10
b = 3.2
c = True
str = 'abc'
tuple = (1,)
#我们无法找到任何一个对上述数据类型的本身进行操作的方法,比如我们没有insert函数在整型前面插入一个1。

重新赋值什么意思?为什么能改变列表地址?:

l = [1,2,3,4,5]
l = ['aa',3,[2,3]]

这一看就是内存地址是改变了的。

四、字典了解补充

我们都知道字典是由key和value组成,那么key和value到底有什么样的一个限制呢?
key必须是不可变类型,value可以是任意类型
例如:

#你可以创建一个这样的字典:
a = {1:200,3.1:'a',True:[1,2,3],'a':2}
#但你不能创建一个这样的字典:
a = {[1,2]:1,(1,3):'abc'}

在这里插入图片描述在这里插入图片描述

扫描二维码关注公众号,回复: 11227702 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/105798247