Python——可变和不可变类型数据

什么是不可变类型?

存储空间保存的数据不允许被修改,这种数据就是不可变类型。

常见的不可变类型有:

  • 数字类型 int, bool, float, complex, long(2.x)
  • 字符串 str
  • 元组 tuple

什么是可变类型?

存储空间保存的数据允许被修改,这种数据就是可变类型。

常见的可变类型有:

  • 列表 list
  • 字典 dict

 

***需要注意,可变类型通过方便改变数据才是修改内存中的数据,使用赋值”=”号并不是修改内存中的数据,而是开辟出一块新的空间来存放新的数据。

两个实例:

 

 1 demo_list = [1, 2, 3]
 2 
 3 print("定义列表后的内存地址 %d" % id(demo_list))
 4 
 5 demo_list.append(999)
 6 demo_list.pop(0)
 7 demo_list.remove(2)
 8 demo_list[0] = 10
 9 
10 print("修改数据后的内存地址 %d" % id(demo_list))
11 
12 demo_dict = {"name": "小明"}
13 
14 print("定义字典后的内存地址 %d" % id(demo_dict))
15 
16 demo_dict["age"] = 18
17 demo_dict.pop("name")
18 demo_dict["name"] = "老王"
19 
20 print("修改数据后的内存地址 %d" % id(demo_dict))

输出结果:

定义列表后的内存地址 2574756635272

修改数据后的内存地址 2574756635272

定义字典后的内存地址 2574760169336

修改数据后的内存地址 2574760169336

*可见通过方法来修改的字典或者列表,其内存地址是不变了,也说明了字典列表是可变的。

 

 

1 a = 1
2 print(id(a))
3 a = "hello"
4 print(id(a))
5 a = [1, 2, 3]
6 print(id(a))
7 a = [3, 2, 1]
8 print(id(a))

输出结果:

140714386514768

2214895252792

2214894789256

2214894789320

*说明‘=‘赋值运算符是重新为变量指向一个新的内存地址,而不是修改原来内存的数据,注意与上例区别好。


 

字典的key与哈希

字典的键必须是不可变类型数据,而值则可以是任意类型的数据。

 

这是因为不可变类型的数据才会有哈希值,而字典的键必须要有对应的哈希值。

 

Python中有一个内置函数hash(o)可以接受一个不可变类型数据作为参数,返回一个整数,这个整数可以看成是该数据的特征码,因此,相同的数据内容得到相同的整数,而不同的数据内容则得到不同的整数。

 

另外,由于列表是不可哈希类型的,因此决定了它的有序性,可重复性。

 

由于字典、集合是可哈希类型的,因此具有不可重复,无序性。

 

posted @ 2019-04-19 07:51  大梦谁觉  阅读(1459)  评论(0编辑  收藏  举报