การลบ Objects ใน Python สามารถทำได้โดยใช้คำสั่ง del เพื่อทำลาย object นั้น ๆ ออกจากหน่วยความจำ แต่สิ่งสำคัญที่ควรทราบคือ Python มีระบบ Garbage Collection ซึ่งเป็นการจัดการหน่วยความจำอัตโนมัติ ดังนั้นเมื่อไม่มีการใช้งาน object ใด ๆ แล้ว Python จะทำการลบ object นั้นออกจากหน่วยความจำเอง
การใช้คำสั่ง del ลบ Objects
เมื่อเราใช้คำสั่ง del เพื่อลบ object จะทำให้การอ้างอิงถึง object นั้นหายไป เมื่อไม่มีการอ้างอิงใด ๆ ถึง object นั้นอีก Python ก็จะจัดการนำ object นั้นออกจากหน่วยความจำโดยอัตโนมัติ
ตัวอย่างการลบ Object
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- เราสร้าง object
my_carจากคลาสCar - เมื่อเราใช้
del my_carระบบจะทำการลบ objectmy_car - หลังจากลบ object ไปแล้ว การพยายามเข้าถึง
my_carจะทำให้เกิดข้อผิดพลาดNameErrorเพราะตัวแปรนี้ถูกลบไปแล้ว
Python Garbage Collection
แม้ว่าคำสั่ง del จะลบการอ้างอิงถึง object ได้ แต่ Python จะไม่ทำลาย object ทันทีจนกว่าจะไม่มีการอ้างอิงใด ๆ ถึง object นั้นแล้ว นี่เป็นหน้าที่ของ Garbage Collector ที่จะคอยจัดการกับ object ที่ไม่ได้ใช้งานอยู่ในหน่วยความจำ
ตัวอย่าง Garbage Collection
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__()
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 นั้น
ผลลัพธ์
BMW is created.
BMW is destroyed.
สรุป
- การลบ object ใน Python สามารถทำได้โดยใช้คำสั่ง
delเพื่อลบการอ้างอิงถึง object นั้น - เมื่อไม่มีการอ้างอิงถึง object แล้ว ระบบ Garbage Collector จะทำลาย object โดยอัตโนมัติ
- เราสามารถใช้เมธอด
__del__()เพื่อควบคุมสิ่งที่จะเกิดขึ้นก่อนที่ object จะถูกลบ
