我用 Python 编程有一段时间了,最近才开始在工作中使用 Ruby。语言非常相似。然而,我刚刚遇到了一个 Ruby 特性,我不知道如何在 Python 中复制它。这是 Ruby 的 freeze
方法。
irb(main):001:0> a = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> a[1] = 'chicken'
=> "chicken"
irb(main):003:0> a.freeze
=> [1, "chicken", 3]
irb(main):004:0> a[1] = 'tuna'
TypeError: can't modify frozen array
from (irb):4:in `[]='
from (irb):4
有没有办法在 Python 中模仿这个?
编辑:我意识到我让它看起来像是只用于列表;在 Ruby 中,freeze
是 Object
上的一个方法,因此您可以使任何对象不可变。对于造成的困惑,我深表歉意。
最佳答案
>>> a = [1,2,3]
>>> a[1] = 'chicken'
>>> a
[1, 'chicken', 3]
>>> a = tuple(a)
>>> a[1] = 'tuna'
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
a[1] = 'tuna'
TypeError: 'tuple' object does not support item assignment
另外,比照。 set
与 frozenset
,bytearray
与 bytes
。
数字、字符串本身是不可变的:
>>> a = 4
>>> id(a)
505408920
>>> a = 42 # different object
>>> id(a)
505409528
关于python - 在 Python 中卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3942825/