Python中list的实现 简书.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Python中list的实现 简书

Python中list的实现 (/users/1GdBU6) acmerfight 2013.03.17 15:39* 1654 字 2210 次阅读  收藏文章 (/sign_in)  分享 原文链接 (/posts/python-list-implementation/) 这篇文章介绍了Python中list是如何实现的。 在Python中list特别有用。让我们来看下list的内部是如何实现的。 来看下面简单的程序 ,在list中添加一些整数并将他们打印出来。  L = []  L.append(1)  L.append(2)  L.append(3)  L [1, 2, 3]  for e in L: ...   print e ...  1    2    3    正如你所看到的 ,list是可以迭代的。 List对象的C结构 Python中list是用下边的C语言的结构来表示的。ob_item 是用来保存元素的指针数组 , allocated是 ob_item 预先分配的内存总容量 简    登录  注册 typedef struct {     PyObject_VAR_HEAD     PyObject **ob_item;     Py_ssize_t allocated; } PyListObject; List的初始化 让我们来看下当初始化一个空list的时候发生了什么 L [] arguments: size of the list = 0 returns: list object = [] PyListNew:     nbytes = size * size of global Python object = 0     allocate new list object     allocate list of pointers (ob_item) of size nbytes = 0     clear ob_item     set list s allocated var to 0 = 0 slots     return list object  非常重要的是知道list申请内存空间的大小 (后文用allocated代替 )的大小和list实际存储元 素所占空间的大小( ob_size )之间的关系 ,ob_size 的大小和 len(L) 是一样的 ,而allocated的大 小是在内存中已经申请空间大小。通常你会看到allocated的值要比ob_size 的值要大。这是为 了避免每次有新元素加入list时都要调用realloc进行内存分配。接下来我们会看到更多关于 这些的内容。 Append 我们在list中追加一个整数:L.append(1)。发生了什么 ?调用了内部的C函数app1() arguments: list object, new element returns: 0 if OK, ‐1 if not app1:     n = size of list      call list_resize() to resize the list to size n+1 = 0 + 1 = 1     list[n] = list[0] = new element     return 0  来让我们看下 list_resize() , list_resize() 会申请多余的空间以避免调用多次 list_resize() 函

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档