当前位置: 首页 > 图灵资讯 > 行业资讯> python namedtuple数据类哪个运行快

python namedtuple数据类哪个运行快

来源:图灵python
时间: 2024-10-09 18:10:40

我们已经使用namedtuple进行建类的操作,对于它其它的功能上认知还不够全面。鉴于namedtuple在其他模块上提到的不是很多,小编决定陆续完整的为大家带来namedtuple的讲解和运用。今天就类中访问字段的一个速度,我们和数据类进行对比,看看哪一个运行的速度很更快。

Dataclasses的用法。

Python3.7 提供了一个装饰器dataclass,用以把一个类转化为dataclass。

你需要做的就是把类包裹进装饰器里:

fromdataclassesimportdataclass
@dataclass
classA:
...

namedtuple和数据类在性能上也有所不同。数据类基于纯Python实现dict。这使得它们在访问字段时更快。另一方面,namedtuples只是常规的扩展tuple。这意味着它们的实现基于更快的C代码并具有较小的内存占用量。

为了证明这一点,请考虑在Python 3.8.5上进行此实验。

In[6]:importsys
In[7]:ColorTuple=namedtuple("Color","rgbalpha")
In[8]:@dataclass
...:classColorClass:
...:"""Aregularclassthatrepresentsacolor."""
...:r:float
...:g:float
...:b:float
...:alpha:float
...:

In[9]:color_tup=ColorTuple(r=50,g=205,b=50,alpha=1.0)

In[10]:color_cls=ColorClass(r=50,g=205,b=50,alpha=1.0)

In[11]:%timeitcolor_tup.r
36.8ns±0.109nsperloop(mean±std.dev.of7runs,10000000loopseach)

In[12]:%timeitcolor_cls.r
38.4ns±0.112nsperloop(mean±std.dev.of7runs,10000000loopseach)

In[15]:sys.getsizeof(color_tup)
Out[15]:72

In[16]:sys.getsizeof(color_cls)+sys.getsizeof(vars(color_cls))
Out[16]:152

如上,数据类在中访问字段的速度稍快一些,但是它们比nametuple占用更多的内存空间。

鉴于nametuple和数据类的优点更不相同,即使是数据类的访问速度更快,在我们内存空间不是很宽裕的条件下,小编还是推荐大家使用nametuple