相关疑难解决方法(0)

列表和元组之间有什么区别?

有什么不同?

元组/列表的优点/缺点是什么?

python tuples list

975
推荐指数
14
解决办法
40万
查看次数

元组比Python中的列表更有效吗?

在实例化和检索元素时,元组和列表之间是否存在性能差异?

python performance tuples list python-internals

201
推荐指数
7
解决办法
7万
查看次数

字典与对象 - 哪个更有效,为什么?

在内存使用和CPU消耗方面,Python的效率更高 - 词典还是对象?

背景: 我必须将大量数据加载到Python中.我创建了一个只是一个字段容器的对象.创建4M实例并将它们放入字典大约需要10分钟和大约6GB的内存.字典准备好后,访问它是一眨眼.

示例: 为了检查性能,我编写了两个执行相同操作的简单程序 - 一个是使用对象,另一个是字典:

对象(执行时间~18秒):

class Obj(object):
  def __init__(self, i):
    self.i = i
    self.l = []
all = {}
for i in range(1000000):
  all[i] = Obj(i)
Run Code Online (Sandbox Code Playgroud)

字典(执行时间~12秒):

all = {}
for i in range(1000000):
  o = {}
  o['i'] = i
  o['l'] = []
  all[i] = o
Run Code Online (Sandbox Code Playgroud)

问题: 我做错了什么或字典比对象更快?如果确实字典表现更好,有人可以解释为什么吗?

python performance dictionary object

118
推荐指数
4
解决办法
4万
查看次数

PEP 412会使__slots__多余吗?

在Python 3.3中实现的PEP 412引入了对属性字典的改进处理,有效地减少了类实例的内存占用. __slots__是为了相同的目的而设计的,那么使用它还有什么意义__slots__吗?

为了自己找出答案,我运行了以下测试,但结果没有多大意义:

class Slots(object):
    __slots__ = ['a', 'b', 'c', 'd', 'e']
    def __init__(self):
        self.a = 1
        self.b = 1
        self.c = 1
        self.d = 1
        self.e = 1  

class NoSlots(object):
    def __init__(self):
        self.a = 1
        self.b = 1
        self.c = 1
        self.d = 1
        self.e = 1
Run Code Online (Sandbox Code Playgroud)

Python 3.3结果:

>>> sys.getsizeof([Slots() for i in range(1000)])
Out[1]: 9024
>>> sys.getsizeof([NoSlots() for i in range(1000)])
Out[1]: 9024
Run Code Online (Sandbox Code Playgroud)

Python 2.7结果:

>>> sys.getsizeof([Slots() for i in …
Run Code Online (Sandbox Code Playgroud)

python python-3.3

14
推荐指数
1
解决办法
528
查看次数

__slots__如何避免字典查找?

我听说__slots__通过避免字典查找使对象更快.我的困惑来自于Python是一种动态语言.在静态语言中,我们a.test通过执行编译时优化来避免字典查找,以便在我们运行的指令中保存索引.

现在,在Python中,a可以很容易地成为另一个具有字典或不同属性集的对象.看起来我们仍然需要进行字典查找 - 唯一的区别似乎是我们只需要一个类的字典,而不是每个对象的字典.

有了这个理性,

  1. 如何__slots__避免字典查找?
  2. 插槽是否可以更快地访问对象?

python slots python-internals

14
推荐指数
2
解决办法
3499
查看次数