Discuss / Python / 作业

作业

Topic source

Geek_MrHowe

#1 Created at ... [Delete] [Delete and Lock User]

理解的对吗,求交流

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
d = {
    'Michael': 95,
    'Bob': 75,
    'Tracy': 85,
    (1, 2, 3):(1, [2, 3]), #这个可以执行 不可变对象(1, 2, 3)可以成为key
    #(1, [2, 3]):3333    会报错TypeError: unhashable type: 'list',tuple虽然是不变对象,但(1, [2, 3])不能作为dict或set的key,因为(1, [2, 3])中有一个元素存list元素的地址。
}
print('d[\'Michael\'] =', d['Michael'])
print('d[\'Bob\'] =', d['Bob'])
print('d[\'Tracy\'] =', d['Tracy'])
print('d[(1, 2, 3)] =', d[(1, 2, 3)])
print('d.get(\'Thomas\', -1) =', d.get('Thomas', -1))

L0standfound

#2 Created at ... [Delete] [Delete and Lock User]

我也是这样理解的 由于tuple内含一个可变的list元素,导致不能成为key

少虾

#3 Created at ... [Delete] [Delete and Lock User]

tuple虽然是不变对象,但(1, [2, 3])不能作为dict或set的key,因为(1, [2, 3])中有一个元素存list元素的地址。----这算什么解释。。 在这里我不是很明白,为什么tuple包含了list就不能作为hash的key?请看到的大神解释下。

I鹤青云

#4 Created at ... [Delete] [Delete and Lock User]

因为根据hash算法将key算出来的值应该一样才行啊,包含了list的tuple本身就可变了,所以当key为包含list的tuple时key本身就可变,所以不能当做key

豆豆豆吡

#5 Created at ... [Delete] [Delete and Lock User]

tuple里包含了可变的list,所以相当于这个tuple也是可变的了,因此不能作为不变值做hash运算吧


  • 1

Reply