Python 列表与元组的区别(Python系列10)

1.列表与元组的区别

  • 元组用于存储无需变化的数据,所以采用“按需分配”的存储机制
  • 列表用于存储需要变化的数据,所以采用“预留空间”的存储机制

  元组的应用场景

  1. 保护数据,当一些数据我们不想被修改的时候可以用元组来保持。
  2. 函数的返回值,当函数有多个返回值的时候我们可以用元组来返回。
  3. 拆包

        列表,元组都能进行拆包,那为什么要使用元组呢,因为元组没有预留空间,所占的内存空间小。那什么是预留空间呢?那这就要提到可变数据了,列表是可变的,而元组是不可变的,那可变数据为什么可变呢?

 2.可变数据为什么可变

  • 存储机制:预留空间 + 自动扩容
  • 自动扩容:开辟更大空间,拷贝原始数据,替换内存地址

        那可变数据在内存图中是如何变化的呢?

        

        因为列表有预留空间,所以在进行增加的时候,就直接可以把数据的内存地址保存到预留的空间中。

        那既然有了预留空间,那自动扩容还有什么用呢?

        预留空间不是无限的,它总有用完的时候,但预留空间用完的时候就会自动扩容,自动扩容拷贝原始数据,替换了内存地址,开辟了更大的空间。而原始数据就变成了垃圾,等待着被垃圾回收器回收掉。

不可变数据为什么不可变

不可变数据是按需分配,当数据发生改变的时候不会在数据原在的空间中进行修改,因为那块空间是用来存储原数据的,是按照原数据的大小进行内存分配的,我们不能确定新数据的大小,所以不能确定能不能存到原来的内存空间中,所以当想改变不可变数据时,内存中是分配了一个空间大小符合数据的新空间将新数据存储。

总结:不可变数据为什么不可变,因为不可变数据的内存大小是按需分配的。

我们来看看一道面试题,高级一点的回答。

面试题:Python语言有哪些数据类型?

答:Python有两种数据类型

        1.可变数据类型

                它们有list, set, dict  其中dict的值是可变的键不可变。

                内存机制:预留空间 + 自动扩容,每次改变都会产生新数据,旧数据成为垃圾。

        2.不可变数据类型

                它们有int, float, str, tuple, complex,bool

                内存机制:按需分配,每次改变都会产生新数据,旧数据会成为垃圾。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值