অবজেক্ট লাইফ সাইকেল

একটা অবজেক্টের পুরো জীবন কাল তথা মেমোরিতে এর আলাদা অস্তিত্ব হিসাব হয় প্রধান তিনটি বিষয়ের উপর - Creation, Manipulation, Destruction.

প্রথমেই যখন একটি ক্লাস তৈরি করা হয় যার উপর ভিত্তি করে বিভিন্ন অবজেক্ট তৈরি হবে, তখনি লাইফ সাইকেলের প্রথম ধাপটি শুরু হয়। এর পরের ধাপটি হচ্ছে, যখন একটি অবজেক্ট ইন্সট্যান্সিয়েট হয় অর্থাৎ __init__ মেথড কল হয়। এ সময় নতুন অবজেক্টটির জন্য মেমোরি অ্যালোকেট হয়। এর একটু আগে অবশ্য ক্লাসের __new__ মেথডটিও কল হয়। এর পর নতুন অবজেক্টটি ব্যবহারের উপযোগী হয়। অর্থাৎ অন্যান্য কোড এই অবজেক্টের অ্যাট্রিবিউট ও মেথড গুলোকে কল করতে পারে। ব্যবহার শেষে এই অবজেক্টকে ডিস্ট্রয় করা যায় (একেই গারবেজ কালেকশন বলা হয়ে থাকে)।

উদাহরণ,

## Definition
class Add:
## Initialization
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def add(self):
        return self.a+self.b
obj = Add(3,4)
## Access
print obj.add()
## Garbage collection

যখন একটি অবজেক্ট ধ্বংস (Destroy) করা হয় তখন তার জন্য পূর্ব নির্ধারিত মেমোরি টুকু ফ্রি হয়ে যায় এবং সেটা অন্য কাজে লাগানো যায়।

রেফারেন্স কাউণ্ট

পাইথনে স্বয়ংক্রিয় ভাবে অপ্রয়োজনীয় অবজেক্ট ধ্বংস হয়ে যায় যখন একটি অবজেক্টের রেফারেন্স কাউন্ট জিরো হয়ে যায়। একটি অবজেক্ট যতগুলো ভ্যারিয়েবল বা অন্যান্য এলিমেন্ট এর সাথে প্রত্যক্ষ ভাবে সম্পর্কিত থাকে অর্থাৎ যতগুলো ভ্যারিয়েবল বা এলিমেন্ট ওই অবজেক্টকে নির্দেশ করে সেই সংখ্যাকে ওই অবজেক্টের রেফারেন্স কাউন্ট বলা হয়। যদি কোন ভ্যারিয়েবল বা এলিমেন্ট ওই অবজেক্টকে নির্দেশ না করে তাহলে বলা যায় সেটির রেফারেন্স কাউন্ট শূন্য তথা সেটাকে মেমোরি থেকে ডিলিট করা যেতে পারে। যখন কোন অবজেক্টের রেফারেন্স কাউন শূন্য হয়ে যায় তখন পাইথন সেটাকে স্বয়ংক্রিয় ভাবে ডিলিট করে দেয়। এটাকে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজের Automatic Memory Management ফিচার হলা হয়ে থাকে। del কিওয়ার্ড ব্যবহার করেও ম্যানুয়ালি কোন অবজেক্টের রেফারেন্স কাউন্ট কমানো যায়।

a = 42  # <42> অবজেক্টটি তৈরি হল
b = a  # a এর মান b তে ঢুকানো হল এবং তাই <42> রেফারেন্স কাউন্ট বেড়ে গেল
c = [a]  # a কে একটি লিস্টের এলিমেন্ট হিসেবে অন্তর্ভুক্ত করা হল এবং তাই <42> রেফারেন্স কাউন্ট আরও বেড়ে গেল

del a  # <42> এর রেফারেন্স কাউন্ট কমানো হল
b = 100  # b এখন a কে নয় বরং অন্য একটি ভ্যালুকে নির্দেশ করে। তাই <42> এর রেফারেন্স কাউন্ট আরও কমে গেলো
c[0] = -1  # c লিস্টের যে অবস্থানে a ছিল সেখানে এখন অন্য ভ্যালু তথা রেফারেন্স কাউন্ট আরও কমে গেলো

Last updated