首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,不可变的对象是不可接受的?

在python中,不可变的对象是不可接受的?
EN

Stack Overflow用户
提问于 2014-03-12 05:43:18
回答 3查看 239关注 0票数 0

我听说过“不变的物体是可持续的”这句话,下面是这样,

弗罗森塞特是不变的,永远是可持续的。

但是tuples是不可变的,但不是可持续的?为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-12 06:14:33

如果里面的元素是可理解的,那么元组是非常可理解的。

代码语言:javascript
复制
>>> hashable = (1,2,4)
>>> not_hashable = ([1,2],[3,4])
>>> hash_check = {}
>>> hash_check[hashable] = True
>>> hash_check
{(1, 2, 4): True}
>>> hash_check[not_hashable] = True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> 
票数 3
EN

Stack Overflow用户

发布于 2014-03-12 05:49:45

并非所有不变的对象都是可理解的。此外,只有包含可变对象的元组才是不可接受的。

代码语言:javascript
复制
>>> t = (1, 2)
>>> hash(t)
1299869600
>>> t = ([1], [2])  
>>> hash(t)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    hash(t)
TypeError: unhashable type: 'list'

所以,问题在于列表,而不是元组。

票数 1
EN

Stack Overflow用户

发布于 2014-03-12 05:52:34

即使元组本身是不可变的,它们也可能包含可变对象,例如,如果我们可以这样做的话:

代码语言:javascript
复制
person = {'name': 'John', 'surname': 'Doe'}
key = (person, True)

cache = {}
cache[key] = datetime.now()  # for example

person['surname'] = 'Smith'

cache[key]  # What is the expected result?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22342931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档