python静态方法比实例方法消耗更少的内存

Aks*_*rma 1 python memory static-methods memory-management python-3.x

我有几个self在其中使用的实例方法,但只在几个地方使用.

所以我可以直接从我使用参数调用这些方法的位置传递这些值,并将方法创建为staticmethod.这会消耗更少的内存吗?

Mar*_*ers 8

你在这里进行微观优化没有任何好处.

是的,常规方法涉及一个新method对象,它是为处理函数和实例之间的绑定而创建的,但这只是一段内存(2个指针加上一些Python元数据)仅在调用期间使用或者如果存储了绑定方法.一个staticmethod对象不创建一个新方法的对象,但是这由偏移大约相同数量的所需内存staticmethod对象:

>>> import sys
>>> class Foo:
...     def bar(self): pass
...     @staticmethod
...     def staticbar(): pass
...
>>> sys.getsizeof(Foo().bar)   # bound method object size
64
>>> sys.getsizeof(Foo.__dict__['staticbar'])  # staticmethod size
56
Run Code Online (Sandbox Code Playgroud)

所以使用一个staticmethod对象可以节省8个字节(在Mac OS X上,在另一个操作系统上,字节数可能略有不同),但是你通常不会保留一个绑定方法(你可以使用instance.method(),创建方法对象然后再丢弃它)打电话后).

因此,除非您存储大量绑定方法,否则无法通过在任何地方手动传递实例来证明您的代码不可读是不合适的.