python-internals相关内容

Python 的 List 是如何实现的?

是链表还是数组?我四处寻找,只发现人们在猜测.我的 C 知识还不够好,无法查看源代码. 解决方案 这是一个动态数组.实际证明:无论索引如何,索引都需要(当然差异非常小(0.0013 µsecs!))相同的时间: ...>python -m timeit --setup="x = [None]*1000" "x[500]"10000000 次循环,3 次中的最佳:每个循环 0.0579 微 ..
发布时间:2022-01-31 08:34:16 Python

为什么“10000000000000000 在范围内(1000000000000001)"Python 3 这么快?

据我了解 range() 函数,其实就是 Python 3 中的一种对象类型,动态生成其内容,类似于生成器. 在这种情况下,我预计以下行会花费过多的时间,因为为了确定 1 万亿是否在范围内,必须生成 1 万亿值: 1_000_000_000_000_000 在范围内(1_000_000_000_000_001) 此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的) ..
发布时间:2022-01-24 19:14:00 Python

Python中的空元组是“常量"吗?

我想让我的代码更有效率(内存).现在我们有很多以可迭代作为参数的函数,例如: def foo(para,meter,iterable):#...经过 有时我们必须为它提供一个空列表才能正常工作:foo(14,25,[]).问题是每次构造一个新列表时:它需要在堆上分配,并且一个列表似乎是 64 字节的内存(在我自己的机器上,用 sys.getsizeof([])) 而只有空元组占用(可能一次)4 ..
发布时间:2022-01-20 08:26:49 Python

为什么当'[] is []'并且'{} is {}'返回False时'()是()'返回True?

据我所知,使用 []、{} 或 () 实例化对象会返回 list、dict 或 tuple 分别;具有新身份的新实例对象. 这对我来说很清楚,直到我实际测试它并且我注意到 () is () 实际上返回 True 而不是预期的 False: >>>() 是 (),[] 是 [],{} 是 {}(真,假,假) 正如预期的那样,当使用 list(), dict() 和 tuple() 分别为: ..
发布时间:2022-01-19 23:53:11 Python

元组在 CPython 中是如何实现的?

我一直在尝试了解 CPython 是如何在幕后实现的.Python 是高级别的很好,但我不喜欢把它当作一个黑盒子. 考虑到这一点,如何实现元组?我看过 源代码 (tupleobject.c),但它超出了我的头脑. 我看到 PyTuple_MAXSAVESIZE = 20 和 PyTuple_MAXFREELIST = 2000,什么是保存和“空闲列表"?(长度为 20/21 或 200 ..
发布时间:2022-01-19 23:39:33 Python

元组 (a,b)=(b,a) 中的成员交换如何在内部工作?

在 [55] 中:a = 5在 [56] 中:b = 6在[57]中:(a,b)=(b,a)在[58]中:出局[58]:6在[59]中:b出局[59]:5 这种 a 和 b 值的交换如何在内部进行?它绝对没有使用临时变量. 解决方案 Python 将右侧表达式与左侧赋值分开.首先评估右侧,并将结果存储在堆栈中,然后使用再次从堆栈获取值的操作码分配左侧名称. 对于 2 或 3 项的元 ..
发布时间:2022-01-19 23:32:34 Python

在迭代其元素时更新集合

当我尝试在迭代其元素时更新集合时,它的行为应该是什么? 我在各种场景中尝试过它,它不会对迭代开始后添加的元素进行迭代,也不会对迭代期间删除的元素进行迭代.如果我在迭代期间删除并放回任何元素,则正在考虑该元素.确切的行为是什么以及它是如何工作的? 这会打印字符串的所有排列: def 排列:答案 = []def 助手(创建,剩余):如果 len(created) == len(s):an ..
发布时间:2022-01-17 18:40:43 Python

为什么 tuple(set([1, “a", “b", “c", “z", “f"])) == tuple(set([“a",";b"、“c"、“z"、“f"、1])) 85% 的时间启用哈希随机化?

鉴于零比雷埃夫斯对另一个问题的回答,我们知道了 x = tuple(set([1, "a", "b", "c", "z", "f"]))y = tuple(set(["a", "b", "c", "z", "f", 1]))打印(x == y) 使用 哈希随机化已启用.为什么是 85%? 解决方案 我假设这个问题的任何读者都读过: 零比雷埃夫斯的回答和 我对 CPython ..
发布时间:2022-01-17 18:36:30 Python

Dict/Set 解析顺序一致性

采用可散列对象的容器(例如 dict 键或 set 项).因此,字典只能有一个值为 1、1.0 或 True 等的键.(注意:有些简化 - 哈希冲突是允许,但这些值被认为是相等的) 我的问题是:解析顺序是否明确定义,生成的对象是否可跨实现预测?例如,OSX Python 2.7.11 和 3.5.1 对 dict 的解释如下: >>>{真:'a',1:'b',1.0:'c',(1+0j): ..
发布时间:2022-01-17 18:21:14 Python

集合是否像 python3.6 中的 dicts 一样排序

由于 Python 3.6 中 dict 实现的变化,现在默认排序.sets 现在也保留顺序吗? 我找不到任何有关它的信息,但由于这两种数据结构在它们的底层工作方式上非常相似,我认为可能是这种情况. 我知道 dict 不能在所有情况下都被订购,但大多数情况下都是如此.如 Python 文档中所述: 这个新实现的顺序保留方面被认为是一个实现细节,不应依赖 解决方案 不,se ..
发布时间:2022-01-17 17:56:35 Python

复合对象上的python垃圾收集器行为

如果复合对象的某些部分仍然被引用,python 垃圾收集器是否会清理它 例如 def foo():A = [ [1, 3, 5, 7], [2, 4, 6, 8]]返回 A[1]B = 富() A[0] 会被垃圾回收吗? 有没有办法通过代码确认? 解决方案 Nothing 引用列表 A 和嵌套列表 A[0],所以是的,它们会从内存中删除. A[1] 引用的嵌套列表对象 ..
发布时间:2022-01-16 09:57:29 Python

python函数可以调用同名的全局函数吗?

我可以从同名函数调用全局函数吗? 例如: def 排序(服务):return {sorted}(服务,key=lambda s: s.sortkey()) {sorted} 我的意思是全局排序函数.有没有办法做到这一点?然后我想用模块名称调用我的函数:service.sorted(services) 我想使用相同的名称,因为它与全局函数做同样的事情,只是它添加了一个默认参数. ..
发布时间:2022-01-14 23:27:42 Python

为什么 int 在 Python 中需要三倍的内存?

在 64 位系统上,Python 中的整数占用 24 个字节.这是例如所需内存的 3 倍.C 表示 64 位整数.现在,我知道这是因为 Python 整数是对象.但是额外的内存有什么用呢?我有我的猜测,但很高兴知道. 解决方案 请记住,Python int 类型没有像 C int 那样的有限范围;唯一的限制是可用内存. 内存用于存储值、整数存储的当前大小(存储大小可变以支持任意大小) ..
发布时间:2022-01-14 14:28:46 Python

“是"运算符对整数的行为异常

为什么在 Python 中出现以下异常行为? >>>一个 = 256>>>乙 = 256>>>a 是 bTrue # 这是预期的结果>>>一个 = 257>>>乙 = 257>>>a 是 bFalse #这里发生了什么?为什么这是假的?>>>257 是 257True # 然而文字数字比较正确 我使用的是 Python 2.5.2.尝试一些不同版本的 Python,似乎 Python 2.3. ..
发布时间:2022-01-14 13:48:04 Python