40853


リスト型が入れ子に出来たので、集合型でも試してみたのですが

[code]

    data = set([9,[8,7],6,6,5])
    print(data) 
    print(type(data)) 
    
[/code]

下記エラーが表示されました

> TypeError: unhashable type: 'list'

・ハッシュ化できない？  
・リストを集合型のキーとして使用している？？  
・どういう意味ですか？

* * *

**追記分。下記理解で合っているでしょうか？**  
・集合型には、set, frozensetがある  
・setは、ミュータブルで可変なので、要素のハッシュ値が確定できない。集合の要素に出来ない、入れ子に出来ない  
・frozensetは、イミュータブルなので、要素のハッシュ値が確定できる。集合の要素に出来る、入れ子に出来る  
・集合型で入れ子が出来る要件は、入れ子にされる側が不変(要素のハッシュ値が確定できるfrozenset)な場合だけ


CC BY-SA 3.0
2018-01-10T02:17:10.853
40852
2018-01-10T09:26:37.517
2018-01-10T09:26:37.517
7886
7886
question
python3
リスト型は入れ子に出来ても、集合型は入れ子に出来ない？


`set` や `list` は可変なのでハッシュ可能じゃありません。つまり、集合の要素できません。

[code]

    data = set([9,[8,7],6,6,5])
    
[/code]

上記の `[8,7]` はリストであり、集合の入れ子ではなく、集合の要素にリストを指定してます。あなたの狙いでは、

[code]

    data = set([9,set([8,7]),6,6,5])
    
[/code]

のつもりではないでしょうか？

ただし、`set` も可変なので集合の要素にできず、入れ子にできません。入れ子にされる側には不変の集合 `frozenset` を使う必要があります。

[code]

    data = {9, frozenset([8, 7]), 6, 6, 5}
    print(data)
    print(type(data))
    # {9, 5, frozenset({8, 7}), 6}
    # <class 'set'>
    
[/code]


CC BY-SA 3.0
2018-01-10T02:32:13.570
40853
2018-01-10T02:32:13.570
40852
answer