Шумо модели истинодро, ки забони барномасозии Python дар он асос ёфтааст, чӣ гуна мефаҳмед?
sobes.tech AI
Ҷавоб аз AI
Дар Python тағйирёбандаҳо ишораҳо (пайвандҳо) ба объектҳо дар хотира мебошанд, на контейнерҳо барои арзишҳои худ. Вақте ки мо арзишро ба тағйирёбанда таъин мекунем, дар асл, он ба объекте ишора мекунад, ки ин арзишро дар бар мегирад. Ҳангоми тағйир додани тағйирёбанда, ки ба объекти тағйирёбанда (масалан, рӯйхат ё луғат) ишора мекунад, худи объект тағйир меёбад, ки ба он ишора мекунад. Ҳангоми тағйир додани тағйирёбанда, ки ба объекти ғайри тағйирёбанда (масалан, рақам, сатр ё tuple) ишора мекунад, дар хотира объект нав эҷод мешавад ва тағйирёбанда ба он ишора мекунад.
# Объекти ғайри тағйирёбанда (int)
a = 10
b = a # a ва b ибтидо ба ҳамон объект ишора мекунанд
print(id(a), id(b)) # Идҳои якхела
a = 20 # Созда мекунад объект нав 20, ки ба он ишора мекунад
print(id(a), id(b)) # Идҳои гуногун, b ҳоло ҳам ба 10 ишора мекунад
# Объекти тағйирёбанда (рӯйхат)
list1 = [1, 2, 3]
list2 = list1 # ҳарду ба ҳамин рӯйхат ишора мекунанд
print(id(list1), id(list2)) # Идҳои якхела
list1.append(4) # Объекти ишорашуда тағйир меёбад
print(list1)
print(list2) # Ҳарду рӯйхат тағйир ёфтаанд
print(id(list1), id(list2)) # Ҳоло ҳам якхела
Механизми ҳисоб кардани ишораҳо барои идоракунии худкории хотира истифода мешавад. Ҳар як объект шумораи тағйирёбандаҳоро, ки ба он ишора мекунанд, пайгирӣ мекунад. Вақте ки ин шумора ба сифр мерасад, объект дастрас нест ва ҷамъкунандаи партовҳо хотираро озод мекунад.
Вазифаи муҳим дар муқоиса бо забонҳое, ки арзишҳоро мустақиман дар тағйирёбандаҳо нигоҳ медоранд (масалан, C), ин аст, ки дар Python, дар b = a, арзиши a ба b нусхабардорӣ намешавад, балки b ба ҳамон объект ишора мекунад, ки a.