কম্পিউটার

পাইথনে বস্তু ধ্বংস করা (আবর্জনা সংগ্রহ)


পাইথন মেমরির জায়গা খালি করতে অপ্রয়োজনীয় বস্তু (বিল্ট-ইন প্রকার বা ক্লাস ইনস্ট্যান্স) স্বয়ংক্রিয়ভাবে মুছে দেয়। যে প্রক্রিয়ার মাধ্যমে পাইথন পর্যায়ক্রমে মেমরির ব্লকগুলি পুনরুদ্ধার করে যা আর ব্যবহার করা হয় না তাকে আবর্জনা সংগ্রহ বলা হয়।

পাইথনের আবর্জনা সংগ্রাহক প্রোগ্রাম সম্পাদনের সময় চলে এবং যখন একটি বস্তুর রেফারেন্স গণনা শূন্যে পৌঁছায় তখন ট্রিগার হয়। একটি বস্তুর রেফারেন্স গণনা পরিবর্তিত হয় যখন এটিকে নির্দেশ করে এমন উপনামের সংখ্যা পরিবর্তিত হয়।

একটি বস্তুর রেফারেন্স সংখ্যা বৃদ্ধি পায় যখন এটি একটি নতুন নাম বরাদ্দ করা হয় বা একটি পাত্রে (তালিকা, টিপল বা অভিধান) রাখা হয়। অবজেক্টের রেফারেন্স কাউন্ট কমে যায় যখন এটি 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

দ্রষ্টব্য − আদর্শভাবে, আপনার ক্লাসগুলিকে আলাদা ফাইলে সংজ্ঞায়িত করা উচিত, তারপরে আমদানি বিবৃতি ব্যবহার করে আপনার মূল প্রোগ্রাম ফাইলে সেগুলি আমদানি করা উচিত৷


  1. পাইথন প্রোগ্রাম একটি অ্যারের মধ্যে বিপরীত গণনা

  2. পাইথনে ক্লাস বা স্ট্যাটিক ভেরিয়েবল?

  3. পাইথনে ফাইল অবজেক্ট?

  4. পাইথনে আবর্জনা সংগ্রহ কীভাবে কাজ করে?