Столкнулся с интересным поведением python при созднии небольших встроенных объектов. При попытке создания, например, трех пустых объектов set python вернет
один объект трижды. Я наивно считал, что скобки в конструкции SomeClass() в python - это аналог оператора new в других языках
У меня не получается сформулировать запрос к гуглу, поэтому
мой вопрос: как гарантированно создавать новый объект при каждом вызове set() и какова вообще логика создания встроенных объектов в python?
Буду рад ссылке на статью, объяснение и (особенно) на документацию
python 3.11
Минималистичный пример - пытаюсь создать три объекта set, а получается только один
for _ in range(3):
print(id(set())) # Ождидаю, что set() создаст уникальный объект при каждом вызове
""" Вывод
2511997244736
2511997244736
2511997244736
"""
# id одинаковые, это один объект, а не три
А вот как это может сыграть злую шутку
# Создаю словарь, где значением является set
set_dict: dict[int, set] = dict.fromkeys(range(3), set()) # Ожидаю, что set() создаст уникальный объект для каждого ключа словаря
set_dict[1].add("some_value") # Пытаюсь добавить строку в один set по конкретному адресу set_dict[1]
print(set_dict) # А добавляется сразу в "три"
""" Вывод
{0: {'some_value'}, 1: {'some_value'}, 2: {'some_value'}}
"""