gpt4 book ai didi

python - 元组与字符串与卡住集。不可变对象(immutable对象)和内存中的副本数量

转载 作者:行者123 更新时间:2023-12-01 04:26:36 24 4
gpt4 key购买 nike

a = "haha"
b = "haha"
print a is b # this is True

上面的代码打印 true。我读到,这样做的原因之一是因为字符串是不可变的,所以内存中的一份副本就足够了。但对于元组的情况:

a = (1, 2, 3)
b = (1, 2, 3)
print a is b # this is False

尽管元组在 python 中也是不可变的,但它会打印 False。经过更多研究后,我发现元组可以包含可变元素,因此我认为如果确定元组是否包含可变对象的成本太高,那么在内存中拥有元组的多个副本是有意义的。但是当我在 freezeset 上尝试时

a = frozenset([1,2])
b = frozenset([1,2])
print a is b # False

这也会打印 false。据我所知,frozenset 本身是不可变的,并且只能包含不可变对象(immutable对象)(我尝试创建一个 freezeset,其中包含一个包含可变列表的元组,但这是不允许的),并且我们可以使用 == 来检查两个 freezeset 是否是值相同,那么为什么 python 在内存中创建它们的两个副本?

最佳答案

你的句子“我读到,造成这种情况的原因之一是因为字符串是不可变的,所以内存中的一份副本就足够了。”是正确的,但并不总是正确的。例如,如果您对字符串执行相同的操作“dgjudfigur89tyur9egjr9ivr89egre8frejf9reimfkldsmgoifsgjurt89igjkmrt0ivmkrt8g,rt89gjtrt”它不会是同一个对象(至少在我的 python 版本上)。同样的现象可以用整数来复制,其中 256 是同一个对象,但 257 不是。它与 python 缓存对象的方式有关,它保存“简单”对象。每个对象都有其标准,对于字符串,它仅包含某些字符,对于整数,它的范围。

关于python - 元组与字符串与卡住集。不可变对象(immutable对象)和内存中的副本数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com