python之列表、元祖详细对比

一、 列表可变,元祖不可变

1. 为什么元祖不可变?

  • 从内存来解释,元祖的每个值在内存中存放于一个地址值,这个地址值是不可变的。

2. 修改元祖中的列表元素值,元祖还是不可变的吗?

  • 可以向元祖中添加扩充元素,这不代表元祖可变,id(元祖)会发现,它的地址值已经变化。创建了另一个指向同一对象的元祖

元祖可以接受一个可变对象作为元素,比如元祖中包含一个列表,修改了元祖中的列表里的值,这个元祖中的列表的地址值值固定的,虽然列表的值变了,但列表的地址值不变,元祖没变。

二、元祖速度快于列表

它们都是引用数据类型。但元祖更快

  • 生成速度(元祖大大快于列表)
  • 迭代速度(遍历速度)元祖快一点
  • 索引速度差不多

为什么元祖快

  1. 因为元祖不可变,它在cpython中被存储在一块固定的连续内存中,创建元祖时一次性分配内存;列表是存储在两块内存中,一块固定内存,存放列表对象的信息,一块不固定大小的内存,存放数据。
    查找元祖时,可以快速定位(C中的列表),查找列表则需要遍历(C中的链表)
  2. 编译时,python编译器把元祖存储在“常量表”中,运行时只需找到这些预构建的常量元祖;由于list可变,需要在运行时构建,分配内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值