Өзгөрүлмөлүүлүк, көчүрүү жана объект модели
Аттар, объекттер, теңдештик жана эмне үчүн көчүрүү эч качан көрүнгөндөй жөнөкөй эмес
is менен == айырмасы, өзгөрүлмө демейки аргумент тузагы жана үстүртөн менен терең көчүрүүнүн айырмасы — баары күтүлбөгөн нерсе болбой калып, бир модельдин алдын ала болжолдонуучу натыйжаларына айланат.
- ат, объект жана маани ортосундагы айырманы түшүндүрүү;
- алиасинг жөнүндө так ой жүгүртүү жана эки ат бир объектти качан бөлүшөрүн билүү;
is(теңдештик) менен==(барабардык) ортосунан туура тандоо;- өзгөрүлмө демейки аргумент тузагын таануу жана оңдоо;
- ыйгаруу,
copy.copyжанаcopy.deepcopyарасынан туура куралды тандоо.
1. Аттар объекттерге байланат, аларды сактабайт
Python-догу ар бир маани — үч атрибуту бар объект: теңдештик (анын дареги, аны id() көрсөтөт), тип жана ал алып жүргөн маалымат. Өзгөрмө — бул кайсы бир аталыш мейкиндигиндеги ошол объекттердин бирине шилтеме кылган ат. Сиз b = a деп жазганда, Python a көрсөткөн объектти кайталабайт; ал b дал ошол эле объектке шилтеме кылганын камсыз кылат. Эми эки ат тең бир объекттин үстүндө турат.
a = [1, 2, 3]
b = a # b ОШОЛ ЭЛЕ тизме объектине шилтейт, көчүрмөгө эмес
b.append(4)
print(a) # [1, 2, 3, 4] -- a "өзгөрдү", анткени тизме бирөө
print(id(a) == id(b)) # True -- бирдей теңдештик
Бул тизмелер үчүн өзгөчө учур эмес. Ар бир ыйгаруу ушундай иштейт — бүтүн сандар, саптар, функциялар жана экземплярлар үчүн бирдей. Башка тилдерде сезген «маани-типтер» менен «шилтеме-типтер» ортосундагы айырма бул жерде жок: баары объектке шилтеме. Айырма — объектти түзгөндөн кийин өзгөртүүгө болобу деген гана нерседе.