到目前为止,我们一共学习了五种数据类型。分别是数字、字符串、列表、元组、字典。
一、什么是可变数据类型、不可变数据类型在Python中,数字、字符串、元组属于不可变类型;列表和字典、集合属于可变类型。
那什么是可变类型,什么是不可变类型呢? 所谓不可变类型,就是一旦在内存中分配了小格子之后,就不允许修改小格子内部的内容。 可变类型就是,在内存中为这个类型分配空间之后,仍然可以使用方法来修改这个内存中的值。而不会改变其地址。
二、注意事项1. 使用赋值语句,不能修改内容(无论是可变数据类型的内容,还是不可变数据类型的内容)。【例1】 2. 要修改可变数据类型的值,需要通过调用方法来完成【例2】。 3. 不可变类型的值,使用函数也不能改变其值。【例3】 4. 在使用字典时,key只能使用不可变类型的数据。也就是key要么是数字,要么是字符串、元组。不能是列表、字典。【例4】【例5】 这是因为: 而hash函数不能接受不可变数据类型。所以字典的key也就不能接受可变数据类型了。
例1:当使用赋值语句给列表赋值的时候,是在改变引用地址,而不是修改之前的内容。
结果:
可以看到4个地址都不一样。 通过上一节引用,我们可以知道。执行第一句的时候,a指向了1.2。执行第二句的时候,a又重新执行了“hello”。执行第三句的时候,a又指向了[1,2,3]。需要注意的是,执行第4句的时候,a是重新指向[1,3,5],而不是修改了[1,2,3]的值。
例2:要修改可变类型的内存中的值,需要通过调用方法的方式实现。
结果:
通过函数改变了a的值。a的地址不变。也说明了列表就是可变变量。
例3: 结果:
发现经过s1.lower()之后,s1的地址和内容都没变。而是重新创建了一个s2,用来保存改变后的结果。
例4:数字、字符串、元组可以作为字典的key
结果:
例5:列表、字典不能作为字典的key
结果:
报错原因是:unhashable type: 'list'。 这就是因为对key进行哈希的时候。哈希函数不能接受可变数据类型,所以报错了。
【科普:哈希】所谓哈希是一个算法。可以理解为一个函数。这个函数可以接受一个参数,并返回一个结果。哈希这个函数的作用就是提取一个数据的特征码。
如果传递的内容是相同的,就会得到相同的结果; 如果传递的内容是不同的,就会传递不同的结果。
而Python中的哈希函数有一个特点:只能接收不可变类型的数据作为参数,不能接受可变类型的数据作为参数。【例1】【例2】
例1:
结果:
例2:
结果:
给哈希函数传入的参数是一个字典,就会报错。
|