python 元组和列表方面解答


下列语句执行后,S值为
S= [ 1,2,3,4,5,6]
s[:1]=[]
s[:2]='a'
s[2:]='b'
S[2:3]=['x",'y']
del s [: 1]

(关于元组与列表方面的问题解答)

[4, 'x', 'y']

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7470557
  • 这篇博客你也可以参考下:python中的 序列和元组之(序列解包和链式赋值!)
  • 你还可以看下python参考手册中的 python- 用于操作列表的工具
  • 除此之外, 这篇博客: Python中列表和元组的区别与联系中的 列表和元组存储方式的差异 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 列表是动态的、可变的,而元组是静态的、不可变的。这样的差异,势必会影响两者存储方式。

    l = [1, 2, 3]
    l.__sizeof__()
    64
    tup = (1, 2, 3)
    tup.__sizeof__()
    48
    

    列表是动态的,所以它需要存储指针,来指向对应的元素(上述例子中,对于 int 型,8 字节)。另外,由于列表可变,所以需要额外存储已经分配的长度大小(8 字节),这样才可以实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。

    通过一个例子,来描述列表空间分配的过程。

    l = []
    l.__sizeof__() // 空列表的存储空间为40字节
    40
    l.append(1)
    l.__sizeof__() 
    72 // 加入了元素1之后,列表为其分配了可以存储4个元素的空间 (72 - 40)/8 = 4
    l.append(2) 
    l.__sizeof__()
    72 // 由于之前分配了空间,所以加入元素2,列表空间不变
    l.append(3)
    l.__sizeof__() 
    72 // 同上
    l.append(4)
    l.__sizeof__() 
    72 // 同上
    l.append(5)
    l.__sizeof__() 
    104 // 加入元素5之后,列表的空间不足,所以又额外分配了可以存储4个元素的空间
    

    可以看到,为了减小每次增加 / 删减操作时空间分配的开销,Python 每次分配空间时都会额外多分配一些,这样的机制(over-allocating)保证了其操作的高效性:增加 / 删除的时间复杂度均为O(1)O(1)O(1)

    对于元组,情况就不同了。元组长度大小固定,元素不可变,所以存储空间固定。

  • 您还可以看一下 齐伟老师的零基础Python 入门课程中的 列表与元组到底该用哪个?(一)小节, 巩固相关知识点