ზოგიერთი ობიექტი პითონში მაგალითად string-ები tuple-ები და number-ები არიან immutable(უცვლელნი), მათი შეცვლა ფუნქციაში/მეთოდში შექმნის ახალ ცვლადს და ფუნქციის გარეთ ცვლადები ხელუხლებელი დარჩება, ხოლო list-ისა და dictionary-ს შეცვლა არ შექმნის ახალ ცვლადს და შესაბამისად ცვლილება აისახება ფუნქციის გარეთ. ასეთ ტიპებს mutable(ცვალებადი) ობიექტები ჰქვიათ.
ლუქ ეთ ზის:
list=[123,456,789]
dic={"123":"abc","456":"def","789":"ghi"}
def change(a,b):
a.remove(123)
b.pop(“123″)
change(list,dic)
print list
print dic
და რა გამოჩნდება კონსოლში???
ეს!
{’789′: ‘ghi’, ’456′: ‘def’}
[456, 789]
ყველა ობიექტს პითონში აქვს თავისი უნიკალური ID თუმცა სხვა ობიექტსაც შეიძლება იგივე ID ჰქონდეს მაგრამ მაგ შემთხვევაში ცვლადები ერთი ტიპისა და ერთი მნიშვნელობის ხდება. ID-ზე შეიძლება იფიქრო როგორც reference-ებზე. აიდის ნახვა შეგიძლიათ ჩაშენებული(built-in) ფუნქციით: id(ობიექტი). მაგალითად
DiX=”123″
print id(DiX)
დააბრუნებს რაღაც რვაციფრიან რიცხვს(ჩემ შემთხვევაში: 11165984)
არსებობს statement: is რომელიც ამოწმებს მიღებულ ორ ობიქტს აქვს თუ არა ერთიდაიგივე ID მაგალითად:
DiX=”123″
dix=DiX#= ოპერატორი მნიშვნელობას და ტიპს გადასცემს რაც კმარა რომ ID დაემთხვეს
dix is DiX# დაბეჭდავს True-ს
print id(DiX),id(dix)
ზედა კოდში წერია ორი განსხვავებული ცვლადი DiX და dix განსხვავებული იმიტომ რომ პითონი case sensitive-ა, რაც ნიშნავს მგრძნობელობას დიდ და პატარა ასოებზე.
ასევე საინტერესო რამ mutable ობიექტებზე:თუ 1ზე მეტ mutable ობიექტს აქ ერთიდაიგივე ID მაშინ ერთ-ერთის ცვლილება გამოიწვევს დანარჩენების ცვლილებასაც. მაგალითად:
list=[123,456,789]
list_=list
list__=list
list__.reverse()
print list
print list_
print list__
დაიბეჭდება
[789, 456, 123]
[789, 456, 123]
[789, 456, 123]
შენიშვნა:
* Assignment(=) ოპერატორი უკვე ნიშნავს რომ ახალი ცვლადი იქმნება, ანუ რაც არ უნდა mutable იყოს ობიექტი თუ მისი სახელის ცვლადს მინიჭების ოპერატორით რამე მივანიჭეთ(არ აქვს მნიშვნელობა რა) ის უკვე ახალ ცვლადს შექმნის სხვა ID-ზე.მაგ.:
list=[1,2,3]
print id(list)
list=[1,2,3]
print id(list)
დამერწმუნეთ სხვადასხვა რაღაც დაიბეჭდება.
პ.ს. დიდი მადლობა გიორგის

0 Responses to “First Steps With Python_Mutable & immutable objects”