2 回答

TA貢獻1796條經(jīng)驗 獲得超7個贊
異常不是來自Random.__init__()方法,而是來自__new__()之前調(diào)用的方法__init__():
>>> random.Random.__new__(random.Random, bytearray([1,2,3]))
TypeError: unhashable type: 'bytearray'
>>> random.Random.__new__(random.Random, bytes([1,2,3]))
<random.Random at 0x1b0cd78>

TA貢獻1845條經(jīng)驗 獲得超8個贊
BlackJack 的回答啟發(fā)了我。我仔細(xì)閱讀了該方法的C源代碼_random.Random.__new__
。
在_random.Random.__new__
(方法random_new
C)中調(diào)用_random.Random.seed
方法(random_seed
使用相同的參數(shù)中C)。如果args
在random_seed
功能包含非int對象作為一個種子,它會嘗試獲得哈希值的對象。因此,當(dāng)對象是字節(jié)數(shù)組時,它會引發(fā)類型錯誤。
因此,_random.Random
并沒有專門處理 bytearray 的播種,但它的子類random.Random
做了,這似乎是一個不兼容的 python 錯誤。
添加回答
舉報