数据类型(7)----可变和不可变类型

 

到目前为止,我们一共学习了五种数据类型。分别是数字、字符串、列表、元组、字典。

 

一、什么是可变数据类型、不可变数据类型

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:

 

结果:

 

给哈希函数传入的参数是一个字典,就会报错。

 

 

 

 

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值