Sobes.tech
Middle
143

Хеш-функциялар мен өзгермелі/өзгермейтін объектілер арасындағы байланыс қандай?

AI-дан жауап

sobes.tech AI

Python-дағы объектілер өзгермелі (mutable) және өзгермейтін (immutable) болып бөлінеді. Хеш-функциялармен байланысы — тек өзгермейтін объектілер ғана хештелетін (hashable) болып табылады және, демек, оларды сөздік кілттері немесе жиынтық элементтері ретінде қолдануға болады.

  • Өзгермейтін объектілер: жол (str), кортеж (tuple), сан (int, float, bool), NoneType және т.б. Олардың мәні құрылағаннан кейін өзгертілмейді. Python мұндай объектілер үшін хеш мәнін бір рет есептейді.
  • Өзгермелі объектілер: тізім (list), сөздік (dict), жиын (set) және т.б. Олардың мәні құрылағаннан кейін өзгертілуі мүмкін. Егер өзгермелі объектілер хештелетін болса, олардың хеш мәні сөздікке немесе жиынға қосылғаннан кейін өзгеруі мүмкін еді, бұл хеш-кестелер негізінде құрылған деректер құрылымдарының жұмысын бұзар еді.

Байланыс сөздіктер мен жиындар қолданылғанда байқалады:

  • Сөздіктер (dictionaries): Хеш-кестені пайдаланып, кілт бойынша мәндерге жылдам қол жеткізуді қамтамасыз етеді. Сөздік кілттері хештелетін болуы керек.
  • Жиындар (sets): Сондай-ақ, бірегей элементтерді сақтау үшін хеш-кестені пайдаланады. Жиын элементтері хештелетін болуы керек.
# Бұл жұмыс істейді, себебі кортеж — өзгермейтін объект
my_dict = {(1, 2): 'hello'}
my_set = {(1, 2)}
# Бұл TypeError қателігін тудырады, себебі тізім — өзгермелі объект
# my_dict = {[1, 2]: 'hello'}
# my_set = {[1, 2]}

# TypeError: unhashable type: 'list'