Python การลบ Object

การลบ Objects ใน Python สามารถทำได้โดยใช้คำสั่ง del เพื่อทำลาย object นั้น ๆ ออกจากหน่วยความจำ แต่สิ่งสำคัญที่ควรทราบคือ Python มีระบบ Garbage Collection ซึ่งเป็นการจัดการหน่วยความจำอัตโนมัติ ดังนั้นเมื่อไม่มีการใช้งาน object ใด ๆ แล้ว Python จะทำการลบ object นั้นออกจากหน่วยความจำเอง

การใช้คำสั่ง del ลบ Objects

เมื่อเราใช้คำสั่ง del เพื่อลบ object จะทำให้การอ้างอิงถึง object นั้นหายไป เมื่อไม่มีการอ้างอิงใด ๆ ถึง object นั้นอีก Python ก็จะจัดการนำ object นั้นออกจากหน่วยความจำโดยอัตโนมัติ

ตัวอย่างการลบ Object

Python
class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color

# สร้าง object ของ Car
my_car = Car("Toyota", "Red")

# แสดงคุณสมบัติของวัตถุ
print(my_car.brand)  # Output: Toyota

# ลบ object my_car
del my_car

# ลองเข้าถึง object หลังจากลบ
try:
    print(my_car.brand)
except NameError as e:
    print(e)  # Output: name 'my_car' is not defined
  1. เราสร้าง object my_car จากคลาส Car
  2. เมื่อเราใช้ del my_car ระบบจะทำการลบ object my_car
  3. หลังจากลบ object ไปแล้ว การพยายามเข้าถึง my_car จะทำให้เกิดข้อผิดพลาด NameError เพราะตัวแปรนี้ถูกลบไปแล้ว

Python Garbage Collection

แม้ว่าคำสั่ง del จะลบการอ้างอิงถึง object ได้ แต่ Python จะไม่ทำลาย object ทันทีจนกว่าจะไม่มีการอ้างอิงใด ๆ ถึง object นั้นแล้ว นี่เป็นหน้าที่ของ Garbage Collector ที่จะคอยจัดการกับ object ที่ไม่ได้ใช้งานอยู่ในหน่วยความจำ

ตัวอย่าง Garbage Collection

Python
class Car:
    def __init__(self, brand):
        self.brand = brand

# สร้าง object car1 และ car2 ที่ชี้ไปยัง object เดียวกัน
car1 = Car("Honda")
car2 = car1

# ลบการอ้างอิง car1
del car1

# object ยังไม่ถูกลบ เนื่องจากยังมีการอ้างอิงจาก car2
print(car2.brand)  # Output: Honda

# ลบการอ้างอิง car2
del car2

# ตอนนี้ object จะถูกลบเนื่องจากไม่มีการอ้างอิงเหลืออยู่

ในตัวอย่างนี้ แม้ว่าเราจะลบ car1 แต่ object ยังคงอยู่เพราะมีการอ้างอิงจาก car2 หลังจากลบ car2 ซึ่งเป็นการอ้างอิงสุดท้าย Python จะทำการลบ object ออกจากหน่วยความจำ

การใช้คำสั่ง __del__() ในการควบคุมการลบ Object

ในบางกรณี เราอาจต้องการให้ทำบางอย่างก่อนที่ object จะถูกลบ Python ให้เราใช้เมธอด __del__() เพื่อระบุสิ่งที่จะเกิดขึ้นเมื่อ object กำลังจะถูกลบ

ตัวอย่างการใช้ __del__()

Python
class Car:
    def __init__(self, brand):
        self.brand = brand
        print(f"{self.brand} is created.")

    def __del__(self):
        print(f"{self.brand} is destroyed.")

# สร้าง object
car = Car("BMW")

# ลบ object
del car
  • เมื่อตัวแปร car ถูกสร้างขึ้น ข้อความ “BMW is created.” จะแสดงขึ้น
  • เมื่อใช้ del car เพื่อลบ object ข้อความ “BMW is destroyed.” จะแสดงขึ้น แสดงว่า Python กำลังทำลาย object นั้น

ผลลัพธ์

สรุป

  • การลบ object ใน Python สามารถทำได้โดยใช้คำสั่ง del เพื่อลบการอ้างอิงถึง object นั้น
  • เมื่อไม่มีการอ้างอิงถึง object แล้ว ระบบ Garbage Collector จะทำลาย object โดยอัตโนมัติ
  • เราสามารถใช้เมธอด __del__() เพื่อควบคุมสิ่งที่จะเกิดขึ้นก่อนที่ object จะถูกลบ
แชร์เรื่องนี้