亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么為字典的鍵“True”賦值會覆蓋同一字典中鍵“1”的值?

為什么為字典的鍵“True”賦值會覆蓋同一字典中鍵“1”的值?

明月笑刀無情 2023-12-29 15:33:30
對于這個簡單的字典 -鍵 1 和值“apple”始終打印為“1:False”我忽略了這個原因嗎?$ 貓字典.pypairs = {1: "apple",    "orange": [2, 3, 4],     True: False,     None: "True",}print(pairs)* $ python3.8 字典.py{1: False, 'orange': [2, 3, 4], None: 'True'}謝謝
查看完整描述

1 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

Python 中的類型是where equals the number和equals the numberbool的子類型:intTrue1False0


>>> True == 1

True

>>> False == 0

True

當這些值被散列時,它們也會產生相同的值:


>>> hash(True)

1

>>> hash(1)

1

>>> hash(False)

0

>>> hash(0)

0

現在,由于字典鍵基于哈希和對象相等(首先使用哈希相等來快速找到可能相等的鍵,然后通過相等進行比較),因此產生相同哈希且相等的兩個值將產生相同的值字典中的“槽”。


如果您創建也具有此行為的自定義類型,您也可以看到這一點:


>>> class CustomTrue:

        def __hash__(self):

            return 1

        def __eq__(self, other):

            return other == 1


>>> pairs = {

        1: "apple",

        "orange": [2, 3, 4], 

        True: False, 

        None: "True",

    }

>>> pairs[CustomTrue()] = 'CustomTrue overwrites the value'

>>> pairs

{1: 'CustomTrue overwrites the value', 'orange': [2, 3, 4], None: 'True'}

雖然這解釋了這種行為,但我確實同意它可能有點令人困惑。因此,我建議不要使用不同類型的字典鍵,以免遇到這種情況。


查看完整回答
反對 回復 2023-12-29
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號