为什么将`frozen = true`添加到dataclass都会使其变慢?

发布于 2025-02-06 13:42:00 字数 306 浏览 1 评论 0原文

如上所述。特别是,我认为它是慢的两倍。我会认为这会使事情更快。

from timeit import timeit

setup = """
from dataclasses import dataclass

@dataclass(frozen=True)  # repeat with False
class A:
    a: int = 1
    b: int = 1
"""

code = """
obj = A(3, 2)
"""

print(f"{timeit(code, setup, number=1000_000)=}")

As above. In particular, I see that it is twice as slow. I would have thought it makes things faster.

from timeit import timeit

setup = """
from dataclasses import dataclass

@dataclass(frozen=True)  # repeat with False
class A:
    a: int = 1
    b: int = 1
"""

code = """
obj = A(3, 2)
"""

print(f"{timeit(code, setup, number=1000_000)=}")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖上的星空 2025-02-13 13:42:00

摘自 frolozen Instances

使用frozen = true__ INT __()不能使用简单的分配来初始化字段,并且必须使用object .__ setAttr __( )

From the documentation of frozen instances:

There is a tiny performance penalty when using frozen=True: __init__() cannot use simple assignment to initialize fields, and must use object.__setattr__().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文