Tuesday, July 14, 2015

თავი 8 (8,11 - 8,12)



8.11 ობიექტები და მნიშვნელობები

ამ ბრძანებებს თუ გავუშვებთ:

a = 'banana'
b = 'banana'

ვიცით, რომ a და b ორივე წამოადგენს სტრინგს, მაგრამ არ ვიცით წარმოადგენენ თუ არა ერთი და იგივე სტრინგს. არის ორი შესაძლებლობა:






ერთ შემთხვევაში a და b წამოდგენენ სხვადასხვა ობიექტს, რომელთაც აქვს იგივე მნიშვნელობა და მეორე შემთხვევაში  წარმოადგენენ იგივე ობიექტს.
იმის შესამოწმებლად ორი ცვლადი წარმოადგენს თუ არა ერთი და იგივე ობიექტს, შეგიძლია გამოიყენო is ოპერატორი:

>>> a = 'banana'
>>> b = 'banana'
>>> a is b
True

ამ მაგალითში პითონმა გააკეთა ერთი სტრინგის ობიექტი რომელსაც ორივე ცვლადი წარმოადგენს. თუმცა, როცა გააკეთებ ორ სიას, გექნება ორი ობიექტი:

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False

ამ შემთხევაში შეგვიძლია ვთქვათ, რომ ეს ორი სია არის ტოლფასი, იმიტომ რომ მათ აქვთ ერთი და იგივე ელემენტები, მაგრამ არა იდენტური, იმიტომ რომ არ არიან ერთი და იგივე ობიექტები. ორი ობიექტი თუ იდენტურია, ისინი ერთმანეთის ტოლფასიცაა, მაგრამ თუ ერთმანეთის ტოლფასია, აუცილებლად იდენტური არ იქნება.
აქამდე "ობიექტს" და "მნიშვნელობას" ვიყენებდით ურთიერთ მონაცვლეობით, მაგრამ უფრო სწორი იქნება ვთქვათ, რომ ობიექტს აქვს მნიშვნელობა. თუ დაწერ
a = [1, 2, 3] , a წარმოადგენს სიის ობიექტს რომლის მნიშვნელობა არის ელემენტების თანმიმდევრობა. სხვა სიას თუ აქვს მსგავსი ელემენტები, ვიტყვით რომ მათ აქვს მსგავსი მნიშვნელობა.

8.12 Aliasing

a თუ არის ობიექტი და გაუტოლებ b - ს  (b = a), მაშინ ორივე ცვლადი წარმოადგენს ერთ ობიექტს:

>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True


ცვლადების ობიექტთან დაკავშირებას ჰქვია მითითება( reference). ამ მაგალითში არის ორი მითითება ერთ ობიექტზე.
ობიექტს ერთზე მეტი მითითებით აქვს ერთზე მეტი სახელი, ასე რომ ვამბობთ ობიექტი არის aliased.(ბევრსახელიანი)
თუ aliased (ბევრსახელიანი)ობიექტი არის შეცვლადი, მაშინ ცვლილება ერთ სახელზე ეფექტს მოახდენს სხვაზეც

>>> b[0] = 17
>>> print a
[17, 2, 3]

ეს თვისება შეიძლება იყოს სასარგებლო, ესაა error-prone (შეცდომის მიდრეკილება?). როცა მუშაობ შეცვლად ობიექტზე, უკეთესია თუ ავიცილებთ მრავალსახელიანობას. უცვლად ობიექტებზე, როგორიცაა სტრინგი, ბევრასეხელიანობა არაა ისეთი პრობლემა. ამ მაგალითში:

a = 'banana'
b = 'banana'

ამისთვის თითქმის არასდროს აქვს მნიშვნელობა a და b წარმოადგენს თუ არა ერთი და იგივე სტრინგს.