← Назад к вопросам

Что делает оператор DELETE?

3.0 Senior🔥 301 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Оператор DELETE в Python

DELETE — это оператор в Python, который удаляет объект из памяти и делает имя переменной недоступным. Это важный инструмент для управления памятью.

Основное назначение DELETE

Оператор del удаляет ссылку на объект. Если это последняя ссылка, garbage collector удаляет сам объект из памяти.

# Создаём переменную
x = [1, 2, 3]
print(x)  # [1, 2, 3]

# Удаляем ссылку на объект
del x

# Теперь переменная не существует
print(x)  # NameError

Удаление элементов списка

list_items = ["apple", "banana", "cherry", "date"]

# Удалить элемент по индексу
del list_items[1]
print(list_items)  # ["apple", "cherry", "date"]

# Удалить срез
list_items = ["apple", "banana", "cherry", "date", "elderberry"]
del list_items[1:3]
print(list_items)  # ["apple", "date", "elderberry"]

# Удалить с шагом
list_items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del list_items[::2]
print(list_items)  # [2, 4, 6, 8, 10]

Удаление из словаря

user = {"name": "Alice", "age": 30, "city": "Moscow"}

# Удалить ключ
del user["age"]
print(user)  # {"name": "Alice", "city": "Moscow"}

# Удалить несуществующий ключ вызывает ошибку
del user["email"]  # KeyError

# Безопаснее использовать pop()
user.pop("name", None)
print(user)  # {"city": "Moscow"}

Удаление из кортежа

Кортежи неизменяемы, поэтому нельзя удалить элемент напрямую:

tuple_items = (1, 2, 3, 4, 5)

# Не работает
del tuple_items[0]  # TypeError

# Вместо этого создаём новый кортеж
tuple_items = tuple_items[1:]
print(tuple_items)  # (2, 3, 4, 5)

Удаление переменных

global_var = "I am global"

def my_function():
    local_var = "I am local"
    print(local_var)
    
    # Удаляем локальную переменную
    del local_var
    print(local_var)  # NameError

my_function()

print(global_var)  # I am global

# Удаляем глобальную переменную
del global_var
print(global_var)  # NameError

Удаление атрибутов объекта

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

user = User("Alice", "alice@example.com")
print(user.email)  # alice@example.com

# Удаляем атрибут
del user.email
print(user.email)  # AttributeError
print(user.name)   # Alice

Сравнение с другими методами удаления

# 1. del - удаляет ссылку (самый явный)
list1 = [1, 2, 3]
del list1

# 2. list.pop() - удаляет и возвращает значение
list2 = [1, 2, 3]
value = list2.pop(1)  # Удаляет индекс 1, возвращает 2
print(value)  # 2

# 3. list.remove() - удаляет по значению
list3 = [1, 2, 3, 2, 4]
list3.remove(2)  # Удаляет первый 2

# 4. dict.pop() - удаляет из словаря
dict1 = {"a": 1, "b": 2}
value = dict1.pop("a")  # Удаляет и возвращает 1

# 5. dict.clear() - удаляет всё
dict2 = {"a": 1, "b": 2}
dict2.clear()
print(dict2)  # {}

Управление памятью

import sys

# Большой объект
big_list = list(range(1000000))
print(f"Размер: {sys.getsizeof(big_list) / 1024 / 1024:.2f} MB")

# Удаляем ссылку
del big_list
print("Объект удалён из памяти")

# Практический пример
def process_large_file():
    with open("huge_file.txt") as f:
        data = f.read()
    
    result = process(data)
    
    # Освобождаем память
    del data
    
    return result

Специальные случаи

# 1. Опасно удалять во время итерации
list_items = [1, 2, 3, 4, 5]

# Неправильно
for i in list_items:
    if i == 2:
        del list_items[list_items.index(i)]

# Правильно
list_items = [x for x in list_items if x != 2]

# 2. Слабые ссылки (weakref)
import weakref

class MyObject:
    pass

obj = MyObject()
weak_ref = weakref.ref(obj)

print(weak_ref())  # MyObject
del obj
print(weak_ref())  # None

Когда НЕ нужен DELETE

# Python управляет памятью автоматически
def example():
    x = [1, 2, 3]
    y = process(x)
    # После выхода из функции x и y удалятся автоматически
    return y

# DELETE нужен когда:
# 1. Функция долгоживущая
# 2. Работа с файлами/подключениями
# 3. Большие данные
# 4. Явная очистка переменных

Деструктор

class DatabaseConnection:
    def __init__(self, connection_string):
        self.conn = connect(connection_string)
    
    def __del__(self):
        # Вызывается при удалении объекта
        if self.conn:
            self.conn.close()
            print("Connection closed")

db = DatabaseConnection("postgresql://localhost/mydb")
del db  # Вызывает __del__

Заключение

DELETE (del) оператор:

  • Удаляет ссылку на объект
  • Удаляет переменные, элементы списков, ключи словарей
  • Помогает освобождать память явно
  • Вызывает del деструктор
  • Не всегда нужен (есть garbage collector)
  • Не удаляет объект если есть другие ссылки

Используйте DELETE для явной очистки памяти при работе с большими данными.

Что делает оператор DELETE? | PrepBro