পাইথন মেমরির জায়গা খালি করতে অবাঞ্ছিত বস্তু (বিল্ট-ইন প্রকার বা ক্লাস ইনস্ট্যান্স) স্বয়ংক্রিয়ভাবে মুছে দেয়। যে প্রক্রিয়ার মাধ্যমে পাইথন পর্যায়ক্রমে মেমরির ব্লকগুলিকে মুক্ত করে এবং পুনরুদ্ধার করে যা আর ব্যবহার করা হয় না তাকে বলা হয় আবর্জনা সংগ্রহ।
পাইথনের আবর্জনা সংগ্রাহক প্রোগ্রাম সম্পাদনের সময় চলে এবং যখন একটি বস্তুর রেফারেন্স গণনা শূন্যে পৌঁছায় তখন ট্রিগার হয়। একটি বস্তুর রেফারেন্স গণনা পরিবর্তিত হয় যখন এটিকে নির্দেশ করে এমন উপনামের সংখ্যা পরিবর্তিত হয়।
কোন বস্তুর রেফারেন্স সংখ্যা বৃদ্ধি পায় যখন এটি একটি নতুন নাম বরাদ্দ করা হয় বা একটি পাত্রে (তালিকা, টিপল বা অভিধান) রাখা হয়। অবজেক্টের রেফারেন্স কাউন্ট কমে যায় যখন এটি del দিয়ে মুছে ফেলা হয়, এর রেফারেন্স পুনরায় বরাদ্দ করা হয়, বা এর রেফারেন্স সুযোগের বাইরে চলে যায়। যখন কোনো বস্তুর রেফারেন্স কাউন্ট শূন্যে পৌঁছায়, পাইথন তা স্বয়ংক্রিয়ভাবে সংগ্রহ করে।
a = 40 # Create object <40> b = a # Increase ref. count of <40> c = [b] # Increase ref. count of <40> del a # Decrease ref. count of <40> b = 100 # Decrease ref. count of <40> c[0] = -1 # Decrease ref. count of <40>এর গণনা
আপনি সাধারণত লক্ষ্য করবেন না যখন আবর্জনা সংগ্রহকারী একটি অনাথ উদাহরণকে ধ্বংস করে এবং তার স্থান পুনরুদ্ধার করে। কিন্তু একটি শ্রেণী বিশেষ পদ্ধতি __del__() প্রয়োগ করতে পারে, যাকে ডেস্ট্রাক্টর বলা হয়, যেটি যখন ইন্সট্যান্সটি ধ্বংস হতে চলেছে তখন এটি চালু করা হয়। এই পদ্ধতিটি একটি উদাহরণ দ্বারা ব্যবহৃত যেকোন অ-মেমরি সংস্থানগুলি পরিষ্কার করতে ব্যবহার করা যেতে পারে৷
উদাহরণ
এই __del__() ধ্বংসকারী একটি উদাহরণের ক্লাসের নাম মুদ্রণ করে যা ধ্বংস হতে চলেছে −
#!/usr/bin/python class Point: def __init__( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed" pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts del pt1 del pt2 del pt3
আউটপুট
যখন উপরের কোডটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
3083401324 3083401324 3083401324 Point destroyed