问题标签 [python-internals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
512 浏览

python - 来自 sys.getrefcount 的意外值

Python 2.7.5 下

三个引用计数在哪里?

PS:什么时候 10000 PyIntObject 将 Py_DECREF 为 0 ref 并被释放?不要说 gc 的东西,引用计数本身可以在没有 gc 的情况下工作。

0 投票
2 回答
523 浏览

python - 在排序时访问列表

我可以在列表中对列表进行排序时访问它吗list.sort()

这返回

请注意,列表的各个项目b被发送到 function m。但是在mlistb是空的,但是它可以看到与flist 具有相同范围的变量b。为什么函数m打印b[]

0 投票
2 回答
4335 浏览

python - 为什么一个类变量没有在列表理解中定义,而另一个是?

我刚刚阅读了这个问题的答案:Accessing class variables from a list comprehension in the class definition

它有助于我理解为什么以下代码会导致NameError: name 'x' is not defined

发生这种NameError情况是因为x未在列表理解的特殊范围内定义。但我无法理解为什么下面的代码可以正常工作而没有任何错误。

我得到了输出[0, 1, 2, 3]。但我期待这个错误:NameError: name 'data' is not defined因为我期待就像在前面的示例中一样,名称x没有在列表推导的范围内定义,同样,名称data也不会在列表推导的范围内定义。

你能帮我理解为什么x没有在列表理解的范围内定义而是定义data吗?

0 投票
1 回答
117 浏览

python - 在python中安全使用remove方法

我从列表中继承了一个 UserList 类并实现了以下方法来删除标记为已删除的条目

元素本身是一个复杂的实体,具有覆盖比较运算符的方法

问题

  1. 上述代码能否成功移除对象?
  2. python 如何在内部工作以从列表中删除元素?
  3. 当我们同时迭代和修改同一个列表时会不会产生问题?
0 投票
3 回答
13706 浏览

python - 为什么 python 中的函数/方法调用很昂贵?

这篇文章中,Guido van Rossum 说函数调用可能很昂贵,但我不明白为什么,也不知道会贵多少。

一个简单的函数调用给你的代码增加了多少延迟,为什么?

0 投票
1 回答
1251 浏览

python - 为什么`float`函数比乘以1.0慢?

我知道这可以说是一个非问题,但我为 HPC 环境编写软件,所以这 3.5 倍的速度提升实际上有所作为。

我曾经dis看过代码,我认为float()它会更慢,因为它需要一个函数调用(不幸的是我dis.dis(float)看不到它实际上在做什么)。

我想第二个问题是我应该什么时候使用float(n),什么时候应该使用n * 1.0

0 投票
2 回答
5168 浏览

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

在 64 位系统上,Python 中的整数占用 24 个字节。这是 64 位整数在例如 C 中所需内存的 3 倍。现在,我知道这是因为 Python 整数是对象。但是额外的内存有什么用呢?我有我的猜测,但很高兴知道。

0 投票
1 回答
103 浏览

python - 为什么编译为字节码时整数除法没有优化?

首先,让我展示一个我做的实验:

正如您在 , 的输出中看到的dis.dis1.5 * 2并被4 - 2编译为LOAD_CONST而不是两个,LOAD_CONST然后是二进制操作。

4 / 2不会被替换为LOAD_CONST 4 (2).

我想知道为什么优化中忽略了除法。

我使用的 Python 版本是 2.7.5。

顺便说一句,似乎在 Python 3 中,像这样的函数得到了更好的优化,这就是我所看到的:

0 投票
1 回答
170 浏览

python - 为什么可以在 Python 函数中使用超过 2 ^ 16 个常量?

在像peephole这样的内部模块中,参数 ofLOAD_CONST存储在opcode.

例如,它用于获取操作参数的宏实现为:

#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))

的参数是数组LOAD_CONST的索引。consts

所以我猜也许我们在 Python 函数中最多只能使用 2 ^ 16 个常量。

但是当我尝试使用 66666 (> 65536) 常量的函数时,它仍然可以正常运行。

可能是什么原因?

0 投票
1 回答
1197 浏览

python - CPython 垃圾何时收集?

如果我的理解是正确的,在 CPython 中,对象的引用计数一达到零就会被删除。如果您有无法访问的引用循环,则该逻辑将不起作用,但有时解释器会尝试找到它们并删除它们(您可以通过调用 gc.collect() 手动执行此操作)。

我的问题是,这些解释器触发的循环收集步骤何时发生?什么样的事件会触发它们?

我对 CPython 案例更感兴趣,但很想听听这在 PyPy 或其他 python 实现中有何不同。