Python中,可变与不可变类型

  1. 可变与不可变类型
    • 学python,一定要记住“一切皆为对象,一切皆为对象的引用”;
    • 所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变;
    • 可变数据类型:value值改变,id值不变;不可变数据类型:value值改变,id值也随之改变。
    • 不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)
    • 不可变对象的特征没有变,变的只是创建了新对象,改变了变量的对象引用。
    • 因为整数为不可变,x,y,z在内存中均指向一个值为1的内存地址,也就是说,x,y,z均指向的是同一个地址。
# 优点:可以减少重复的值对内存空间的占用。
# 缺点:如上图所示,修改这个变量绑定的值,如果内存中没用存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。而不是修改变量原来指向的内存块的值,这会给执行效率带来一定的降低。
  • 可变(mutable):字典型(dictionary)、列表型(list)

2.如何确定一种数据类型是可变的还是不可变的:

根据可变数据类型与不可变数据类型的概念,只需要在改变value值的同时,使用id()函数查看变量id值是否变化,就可以知道这种数据类型是可变的还是不可变的了。
  • 数字
当数字的值改变时,变量id值也改变了,所以数字是不可变数;
  python中为了减少开辟内存造成的时间开销,对于三位内的整型数字类型数据,在开辟一块内存空间后,后面的三位内的整型数据都放到这个内存空间中,所以三位以内的整型数字类型的id值都是相同的。
  • 字符串
当字符串的值改变时,变量id值也改变了,所以字符串是不可变数据类型;
  • 布尔
当布尔的值改变时,变量id值也改变了,所以布尔值是不可变数据类型
  • 元祖
因为元祖元素是不可修改的,所以元祖是不可变数据类型
  • 列表
 当列表中的某个元素改变时,列表的id值没有改变,所以列表是可变数据类型;
  • 字典
当字典的键值对的value部分改变时,字典的id值没有改变,所以字典是可变数据类型

转载文章:https://www.cnblogs.com/xxtalhr/p/9049188.html

思考一个问题:当元组使用set来给元祖去重时,元祖中重复的数据都被去掉了,元祖中元素个数减少了,所以元祖是不是可变的数据类型呢?
这里写图片描述
看见吗,list即使被set去重以后,其实这里的list已经是新创建的元组,而原来的list地址没有改变。
元组依然是不可变类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值