930得票3回答
为什么Python代码在函数中运行更快?

def main(): for i in xrange(10**8): pass main() 这段 Python 代码在 Linux 的 BASH 终端中使用 time 函数计时。real 0m1.841s user 0m1.828s sys 0m...

800得票12回答
如果PyPy比CPython快6.3倍,为什么我不应该使用PyPy?

我一直听说PyPy项目。他们声称在他们的网站上,它比CPython解释器快6.3倍。 每当我们谈到像Python这样的动态语言时,速度是最重要的问题之一。为了解决这个问题,他们说PyPy比较快6.3倍。 第二个问题是并行性,臭名昭著的全局解释器锁定(GIL)。对此,PyPy表示它可以提供无...

643得票11回答
Python与Cpython的区别

关于Python和CPython(Jython,IronPython)的大惊小怪,我不太明白: python.org提到CPython是: Python的“传统”实现(昵称为CPython) yet another Stack Overflow question提到: CPyth...

290得票2回答
为什么一些浮点数小于整数的比较速度比其他的慢四倍?

比较浮点数和整数时,一些值的比较需要比其他同样数量级的值更长的时间来评估。例如:>>> import timeit >>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 mil...

230得票6回答
set() 是如何实现的?

我看到有人说 Python 中的 set 对象具有 O(1) 的成员检查。它们在内部是如何实现以允许这样做的?它使用了什么样的数据结构?该实现还有哪些影响? 这里的每个答案都很启发人,但我只能接受一个答案,所以我会选择最接近我的原始问题的答案。感谢大家提供的信息!

149得票3回答
什么导致[*a]过度分配?

显然,list(a)不会过度分配内存,[x for x in a]在某些时候会过度分配内存,而[*a]则总是过度分配内存? 这里有0到12的尺寸以及三种方法的结果大小(以字节为单位): 0 56 56 56 1 64 88 88 2 72 88 96 3 80 88 104 4 88 ...

136得票7回答
布尔值 identity == True 与 is True 的区别

惯用法是使用if foo is None而不是if foo == None来测试一个值是否为None。 如果你想要确定一个值是否确切地等于True(而不仅仅是类似于true的值),有没有理由使用if foo == True而不是if foo is True?这在CPython(2.x和3.x...

132得票3回答
为什么在迭代小字符串时比迭代小列表慢?

我在玩timeit时发现,对一个小字符串进行简单的列表推导比对由小单字符组成的列表进行相同操作所需的时间更长。有什么解释吗?时间几乎是1.35倍。>>> from timeit import timeit >>> timeit("[x for x in 'a...

131得票4回答
为什么 (0-6) 等于 -6 是错误的?

在调试一些代码时,我发现了一些奇怪的东西。 显然,>>> (0-6) is -6 False 但是,>>> (0-5) is -5 True 为什么会发生这种情况?

101得票3回答
我们能让1等于2成立吗?

Python中的int是封装实际数字值的对象。我们能够更改该值吗,例如将对象1的值设置为2?这样1 == 2就会变为True吗?