Python использует особую логику для работы с встроенными объектами. Она основана на принципе кэширования (caching) и позволяет повторно использовать уже существующие объекты, вместо создания новых, чтобы повысить эффективность программы и экономить память.
В случае с типом данных `set()`, Python использует кэширование и множества с одинаковым содержимым будут ссылаются на один и тот же объект, что объясняет, почему код ниже создает только один объект set, а не три:
```python
set_1 = set([1, 2, 3])
set_2 = set([1, 2, 3])
set_3 = set([1, 2, 3])
print(set_1 is set_2) # Output: True
print(set_1 is set_3) # Output: True
```
Если вам необходимо гарантировать создание нового объекта set при каждом вызове `set()`, можно использовать оператор `{}`:
```python
set_1 = {1, 2, 3}
set_2 = {1, 2, 3}
set_3 = {1, 2, 3}
print(set_1 is set_2) # Output: False
print(set_1 is set_3) # Output: False
```
Также, чтобы обеспечить уникальность объектов при использовании других встроенных типов данных (например, списка `list()`), можно использовать схожий подход - создавать новые объекты через использование оператора `[ ]`:
```python
list_1 = [1, 2, 3]
list_2 = [1, 2, 3]
list_3 = [1, 2, 3]
print(list_1 is list_2) # Output: False
print(list_1 is list_3) # Output: False
```
Более подробную информацию о кэшировании и поведении встроенных объектов в Python можно найти в официальной документации Python.