【问题标题】:How are lists implemented to be heterogeneous in python?列表如何在 python 中实现异构?
【发布时间】:2019-06-10 06:25:46
【问题描述】:

列表是如何实现异构的?我知道一个列表是一个动态的指针数组,它指向所需元素的内存位置,但是当索引指向的元素大小不同时,它是如何工作的。

指针指向的位置是否包含有关该位置所持有的类型的信息,如果是,那么这种信息是如何格式化、使用和返回的?

我了解 [1,2,3] 在内存中的外观,但不知道 [1,2,"abcdefg"] 在内存中的外观。

【问题讨论】:

  • 使用指针的原因是它们(在这里简化)大小相同,因此您可以将它们组成的数组表示一个异构集合。
  • 你如何想象[1, 2, 3]在记忆中的样子?
  • 我想 [1,2,3] 是内存中彼此相邻的 3 个指针,它们指向 3 个不同的内存部分,每个部分 8 个字节。

标签: python list compiler-construction


【解决方案1】:

一切都是python中的对象:正如您所提到的,列表是指向列表中包含的对象的内存位置的“指针”的集合。

作为对象,它们每个都知道自己的类型、属性、属性等。
因此,它们不能超出自己的内存边界,并且指向它们的指针数量的计数/计算由 python 解释器不可见地保存。

【讨论】:

    【解决方案2】:

    从技术角度(即如何实现这样的东西),查找 C 中的抽象数据类型 (ADT) 概念,例如here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 2016-11-27
      • 2016-04-27
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多