python-basic

⌘K
  1. Home
  2. python-basic
  3. OOP
  4. ক্লাসের মেমোরি ম্যানেজমেন্ট

ক্লাসের মেমোরি ম্যানেজমেন্ট

ক্লাসের মেমোরি ম্যানেজমেন্ট (Memory Management in Classes)

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

অবজেক্ট মেমোরি ম্যানেজমেন্ট এর ভূমিকা

অবজেক্ট মেমোরি ম্যানেজমেন্ট এর মাধ্যমে আমরা নিশ্চিত হই যে:

  • অবজেক্ট তৈরি হওয়ার সময় যথাযথ পরিমাণ মেমোরি বরাদ্দ করা হচ্ছে।
  • অবজেক্ট ব্যবহারের পরে মেমোরি মুক্ত করা হচ্ছে, যাতে মেমোরির অপচয় না হয়।
  • আমাদের প্রোগ্রাম ততটাই কার্যকরী এবং দ্রুত কাজ করে, যতটা সম্ভব কম মেমোরি ব্যবহার করে।

গার্বেজ কালেকশন এবং রেফারেন্স কাউন্টিং

গার্বেজ কালেকশন হলো সেই প্রক্রিয়া, যা অব্যবহৃত বা অপ্রয়োজনীয় অবজেক্টের মেমোরি মুক্ত করে। পাইথনে গার্বেজ কালেকশন মূলত রেফারেন্স কাউন্টিং ব্যবহার করে।

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

উদাহরণ:

ধরি, আমাদের একটি শিক্ষার্থী ক্লাস (Student) আছে। যখন আমরা একটি নতুন শিক্ষার্থী অবজেক্ট তৈরি করি, তখন মেমোরি বরাদ্দ হয়।

class Student:
    def __init__(self, name):
        self.name = name

# একটি Student অবজেক্ট তৈরি করা
student1 = Student("Alice")

এখানে student1 অবজেক্টটি Alice নামে একটি নাম ধারণ করে। যখন আমরা আর student1 ব্যবহার না করি এবং এর রেফারেন্স সংখ্যা শূন্য হয়ে যায়, তখন গার্বেজ কালেক্টর এই অবজেক্টটির মেমোরি মুক্ত করে।

del() মেথড এবং ডেস্ট্রাক্টর

__del__() মেথড হল একটি বিশেষ মেথড, যা অবজেক্টের জীবনের শেষ সময়ে স্বয়ংক্রিয়ভাবে কল করা হয়। এটি একটি ডেস্ট্রাক্টর, যা অবজেক্টটি মুছে ফেলার আগে কিছু নির্দিষ্ট কাজ করতে পারে।

উদাহরণ:

ধরি, আমরা আমাদের Student ক্লাসে একটি __del__() মেথড যুক্ত করেছি, যাতে এটি একটি বার্তা প্রিন্ট করে যখন অবজেক্টটি মুছে ফেলা হয়।

class Student:
    def __init__(self, name):
        self.name = name
        print(f"Student {self.name} created.")

    def __del__(self):
        print(f"Student {self.name} deleted.")

# অবজেক্ট তৈরি করা
student1 = Student("Alice")
student2 = Student("Bob")

# অবজেক্ট মুছে ফেলা
del student1
del student2

আউটপুট

Student Alice created.
Student Bob created.
Student Alice deleted.
Student Bob deleted.

উদাহরণ বিশ্লেষণ

  1. অবজেক্ট তৈরি: Student ক্লাসের নতুন অবজেক্ট তৈরি করার সময়, __init__() মেথড কল হয় এবং এটি মেমোরি বরাদ্দ করে।
  2. রেফারেন্স কাউন্টিং: যখন student1 এবং student2 অবজেক্টগুলি তৈরি হয়, তাদের জন্য রেফারেন্স কাউন্ট বাড়ে।
  3. অবজেক্ট মুছে ফেলা: যখন del student1 এবং del student2 কল করা হয়, তখন এই অবজেক্টগুলির রেফারেন্স কাউন্ট কমে যায় এবং শূন্য হলে গার্বেজ কালেক্টর তাদের মেমোরি মুক্ত করে।
  4. ডেস্ট্রাক্টর কল: অবজেক্টগুলি মুছে ফেলার সময় __del__() মেথড স্বয়ংক্রিয়ভাবে কল হয় এবং এটি একটি বার্তা প্রিন্ট করে।

এখানে একটি লাইব্রেরির ব্যবস্থাপনার উদাহরণ হিসেবে একটি পাইথন প্রোগ্রাম তৈরি করা হয়েছে। এই প্রোগ্রামটি বইয়ের জন্য একটি ক্লাস তৈরি করবে, এবং বইগুলো ধার নেওয়া এবং ফেরত দেওয়ার প্রক্রিয়া মডেল করবে। এটি গার্বেজ কালেকশন ও ডেস্ট্রাক্টরের ব্যবহারও দেখাবে।

লাইব্রেরি ব্যবস্থাপনার উদাহরণ

কোড:

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
        self.is_checked_out = False  # বইটি ধার নেওয়া হয়েছে কিনা

        print(f"Book '{self.title}' by {self.author} created.")

    def check_out(self):
        if not self.is_checked_out:
            self.is_checked_out = True
            print(f"Book '{self.title}' checked out.")
        else:
            print(f"Book '{self.title}' is already checked out.")

    def return_book(self):
        if self.is_checked_out:
            self.is_checked_out = False
            print(f"Book '{self.title}' returned.")
        else:
            print(f"Book '{self.title}' was not checked out.")

    def __del__(self):
        print(f"Book '{self.title}' deleted.")


class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        self.books.append(book)
        print(f"Book '{book.title}' added to the library.")

    def show_books(self):
        print("Books in the library:")
        for book in self.books:
            status = "Checked out" if book.is_checked_out else "Available"
            print(f"- {book.title} by {book.author} ({status})")

    def check_out_book(self, title):
        for book in self.books:
            if book.title == title:
                book.check_out()
                return
        print(f"Book '{title}' not found in the library.")

    def return_book(self, title):
        for book in self.books:
            if book.title == title:
                book.return_book()
                return
        print(f"Book '{title}' not found in the library.")

    def __del__(self):
        print("Library deleted.")


# লাইব্রেরি তৈরি করা
library = Library()

# কিছু বই তৈরি ও লাইব্রেরিতে যোগ করা
book1 = Book("The Great Gatsby", "F. Scott Fitzgerald")
library.add_book(book1)

book2 = Book("To Kill a Mockingbird", "Harper Lee")
library.add_book(book2)

# বই দেখানো
library.show_books()

# বই ধার নেওয়া
library.check_out_book("The Great Gatsby")

# বই ফেরত দেওয়া
library.return_book("The Great Gatsby")

# অব্যবহৃত অবজেক্ট মুছে ফেলা
del book1
del book2
del library

ব্যাখ্যা:

  1. Book ক্লাস:
    • __init__() মেথড: নতুন বইয়ের তথ্য (শিরোনাম এবং লেখক) সেট করে এবং বইটির অবস্থা is_checked_out ডিফল্টভাবে False সেট করে।
    • check_out() মেথড: বইটি ধার নেওয়া হয়েছে কিনা, তা পরীক্ষা করে। যদি না থাকে, তবে বইটি ধার নেয়া হয়।
    • return_book() মেথড: বইটি ফেরত দেওয়ার প্রক্রিয়া। যদি বইটি ধার নেয়া না থাকে, তবে বার্তা দেয়।
    • __del__() মেথড: বইটি মুছে ফেলার সময় এই মেথড কল হবে এবং বইয়ের তথ্য প্রিন্ট করবে।
  2. Library ক্লাস:
    • __init__() মেথড: লাইব্রেরির জন্য একটি খালি বইয়ের তালিকা তৈরি করে।
    • add_book() মেথড: লাইব্রেরিতে নতুন বই যোগ করে।
    • show_books() মেথড: লাইব্রেরিতে থাকা বইগুলো এবং তাদের অবস্থা দেখায়।
    • check_out_book() এবং return_book() মেথড: বই ধার নেওয়া এবং ফেরত দেওয়ার প্রক্রিয়া সম্পন্ন করে।
    • __del__() মেথড: লাইব্রেরি মুছে ফেলার সময় কল হয়।

উদাহরণ কার্যক্রম:

  • আমরা একটি লাইব্রেরি তৈরি করেছি এবং দুটি বই (The Great Gatsby এবং To Kill a Mockingbird) যোগ করেছি।
  • এরপর লাইব্রেরির বইগুলো দেখানো হয়েছে।
  • তারপর আমরা The Great Gatsby বইটি ধার নিয়েছি এবং পরে তা ফেরত দিয়েছি।
  • অবশেষে, অব্যবহৃত বই ও লাইব্রেরি অবজেক্টগুলো মুছে ফেলা হয়েছে, যা ডেস্ট্রাক্টরের মাধ্যমে দেখানো হয়েছে।

বাস্তব জীবনের প্রেক্ষাপট:

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

এভাবে, লাইব্রেরি ব্যবস্থাপনার উদাহরণটি পাইথনের ক্লাস, অবজেক্ট, এবং মেমোরি ম্যানেজমেন্ট কিভাবে কাজ করে তা স্পষ্ট করে।

How can we help?