কম্পিউটার

পাইথনে আবর্জনা সংগ্রহ


পাইথন মেমরি ব্যবস্থাপনা সরাসরি এগিয়ে. আপনার মেমরি পরিচালনার বিষয়ে চিন্তা করার দরকার নেই, কারণ মেমরি বরাদ্দকরণ এবং ডিলোকেশন স্বয়ংক্রিয়। মেমরি ব্যবস্থাপনার একটি পদ্ধতি হল আবর্জনা সংগ্রহ। আসুন আবর্জনা সংগ্রহের বিভিন্ন দিক বুঝতে পারি,

আবর্জনা সংগ্রহ

এটি এমন একটি প্রক্রিয়া যার মাধ্যমে শেয়ার্ড কম্পিউটার মেমরি পরিষ্কার করা হয় যা বর্তমানে একটি চলমান প্রোগ্রাম দ্বারা ব্যবহার করা হচ্ছে যখন সেই প্রোগ্রামটির আর সেই মেমরির প্রয়োজন নেই। আবর্জনা সংগ্রহের সাথে, সেই মুক্ত স্মৃতি অন্য প্রোগ্রাম দ্বারা ব্যবহার করা যেতে পারে।

মেমরি পরিচালনার জন্য পাইথন দ্বারা ব্যবহৃত দুটি পদ্ধতি রয়েছে -

  • রেফারেন্স গণনা
  • আবর্জনা সংগ্রহ

পাইথনের আবর্জনা সংগ্রহ স্বয়ংক্রিয় কিন্তু কিছু প্রোগ্রামিং ভাষায়, আপনাকে নিজেকে বস্তু পরিষ্কার করতে হবে। পাইথনে, আপনি চাইলে ম্যানুয়ালি বস্তু মুছে ফেলতে পারেন।

>>> x = 9
>>> print(x)
9
>>> del x
>>> print(x)
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in <module>
      print(x)
NameError: name 'x' is not defined

উপরে আমরা কেবল একটি ভেরিয়েবল (x) সংজ্ঞায়িত করি এবং এটি ব্যবহার করি। রানটাইম চলাকালীন, আমরা বস্তুটি মুছে ফেলি (কারণ পাইথনের সবকিছুই একটি বস্তু) এবং এটি আউটপুট করার চেষ্টা করি।

উপরের প্রোগ্রামের প্রথম দুই লাইনে অবজেক্ট x জানা আছে। যাইহোক, অবজেক্ট(x) মুছে ফেলার পর, আমরা এটিকে আর প্রিন্ট করতে পারি না।

সুতরাং উপরে থেকে, আমরা দেখতে পাচ্ছি যে আবর্জনা সংগ্রহ সম্পূর্ণরূপে স্বয়ংক্রিয় এবং আমাদের এটি নিয়ে চিন্তা করার দরকার নেই। অন্য একটি উদাহরণ দিয়ে উপরের ধারণাটি বোঝা যাক। পাইথনের প্রতিটি অবজেক্ট যেমন উপরের কোডে আছে, অবজেক্ট x এর একটি রেফারেন্স কাউন্ট এবং একটি টাইপের একটি পয়েন্টার রয়েছে।

রেফারেন্স কাউন্ট পরিবর্তনের মান নির্ভর করে কিভাবে আমরা এটি ব্যবহার করছি, উদাহরণস্বরূপ, যদি আমরা অবজেক্ট xটিকে অন্য অবজেক্ট y-এ বরাদ্দ করি, তাহলে এর রেফারেন্স কাউন্ট বেড়ে 2 হয়ে যায়।

>>> some_list = [1, 2 ,3, 4, 5, 6, 7, 8, 9]
>>> #Reference count of some_list = 1
>>> other_list = some_list
>>> #Reference count = 2
>>> #This will also increases if we pass the object as an assignment
>>> list_total = sum(some_list)
>>> # If we put the object in a list, reference count will also increase
>>> list_of_list = [some_list, some_list, some_list]
>>>
>>> #Let's check the reference count of object "some_list"
>>> import sys
>>> sys.getrefcount(some_list)
6

পাইথনে মেমরি পরিচালনার রেফারেন্স গণনা বোঝার জন্য উপরে একটি ভাল উদাহরণ। আমরা একটি অবজেক্ট তৈরি করি “some_list” (রেফারেন্স কাউন্ট =1), আমরা এটিকে অন্য অবজেক্টে বরাদ্দ করি (রেফ. কাউন্ট =2), আমরা অবজেক্টটিকে একটি আর্গুমেন্ট হিসেবে সেট করি তালিকা যেখানে বস্তুর উপস্থিতি তিন গুণ (রেফ. গণনা =6)। পরে যখন আমরা বস্তু "some_list" এর রেফারেন্স কাউন্ট পাওয়ার চেষ্টা করি, আমরা 6 পাই।

>>> import sys
>>> sys.getrefcount(some_list)
6
>>>
>>> del list_of_list
>>> sys.getrefcount(some_list)
3
>>> del some_list
>>> sys.getrefcount(some_list)
Traceback (most recent call last):
   File "<pyshell#17>", line 1, in <module>
      sys.getrefcount(some_list)
NameError: name 'some_list' is not defined

  1. পাইথন অবজেক্ট তুলনা "হ্যাঁ" বনাম "=="

  2. কোন পাইথন অবজেক্ট ইন্সপেক্টর আছে?

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

  4. পাইথনে একটি TimeTuple কি?