zoukankan      html  css  js  c++  java
  • Python list 和 tuple区别

    共同点:

    列表和元祖都是一个可以放任意数据类型的有序集合,并且不要求集合中的元素类型统一
    `

    不同点:

    可修改性:

    • 列表是动态的,长度大小不固定,可以增删改(mutable);元组是静态的,长度大小固定,无法增删改(immutable)
    • 元组内嵌套列表,列表这个元素本身是可以变化的,但不能直接修改元组元素,只能修改这个列表元素本身的值
    • 列表内嵌套元组,元组这个元素本身是不可变的,只能变化列表的元组本身对应的元素

    列表和元组的存储空间
    相同元素列表所占内存要比元组多,原因如下:

    • 列表需要存储指针来指向对应的元素
    • 列表为可变的,会额外分配出一些空间;元组长度大小固定,元素不可变,所以存储空间固定
    • 需要额外存储已经分配的长度大小,方便实时追踪列表空间的使用情况,空间不够时及时分配。(over-allocating)保证了其操作的高效性:增加 / 删除的时间复杂度均为 O(1)。
    • 查看空间:list.sizeof()、tuple.sizeof()

    列表和元祖的性能

    • 静态变量资源缓存,元组更优(垃圾回收机制):对于静态数据做一些资源缓存,一些变量不被使用时会被回收,但如果占用空间不大时python会暂时缓存这部分内存,下次我们再创建同样大小的元组时可以直接被分配之前缓存的内存空间,大大加快了程序的运行速度。
      python3 -m timeit 'x=(1,2,3,4,5,6)'
      20000000 loops, best of 5: 9.97 nsec per loop
      python3 -m timeit 'x=[1,2,3,4,5,6]'
      5000000 loops, best of 5: 50.1 nsec per loop

    • 索引操作,速度差别小
      python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]'
      10000000 loops, best of 5: 22.2 nsec per loop
      python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]'
      10000000 loops, best of 5: 21.9 nsec per loop

    • 增删改,列表更优:对于元组,必须得通过新建一个元组来完成

    • 创建空列表,以下哪种方法优
      -- empty_list = list()----效率低
      -- empty_list = []--------效率高
      ``原因:区别主要在于list()是一个function call,Python的function call会创建stack,并且进行一系列参数检查的操作,比较expensive,反观[]是一个内置的C函数,可以直接被调用,因此效率高。
      python3 -m timeit 'empty_list = list()'
      5000000 loops, best of 5: 68.4 nsec per loop
      python3 -m timeit 'empty_list = []'
      10000000 loops, best of 5: 24.4 nsec per loop
      python3 -m timeit 'empty_list = ()'
      20000000 loops, best of 5: 13 nsec per loop

    内置函数

    • lt.count(item): 统计列表 / 元组中 item 出现的次数。
    • lt.index(item): 返回列表 / 元组中 item 第一次出现的索引
    • l.reverse(): 原地倒转列表
    • l.sort(): 原地列表排序
    • l.append(item): 列表最佳元素
    • reversed(l/t): 返回一个倒转后的迭代器(上文例子使用 list() 函数再将其转换为列表)
    • sorted(l/t): 返回排好序的新列表
    • list(tuple)、tuple(list): 元组列表间的转化
    • lt[m:n]: 切片:0标识前面第一个元素,-1表示后面数最后一个元素
  • 相关阅读:
    年近30,朋友聚会都聊什么?
    2016世界最热门的编程语言与薪资揭秘
    程序员的春天来了,最美赏花旅游地十大攻略
    雄联盟工程师独家分享:如何使开发更有效率
    小偷被抓叫嚣:我不偷警察没饭吃
    3.7女生节:被程序员男友送的奇葩礼物宠哭了
    最适合程序员加班吃的6大营养美食
    谷歌汽车出误判曝光 6大奇葩科技更牛
    【程序员的爱情】彼岸花开谁又种下了执念
    分享10个免费或便宜的Photoshop替代工具
  • 原文地址:https://www.cnblogs.com/belle-ls/p/14622159.html
Copyright © 2011-2022 走看看