Sobes.tech
Назад к вопросам
Middle
7

# 1 a = [1, 2, 3] b = a b.append(4) # print(a) # print(a is b) # 2 a = 10 b = a # print(a is b) b += 5 # print(a) # print(b) #3 # data = { # ([1, 2, 3]): "a", # (1, 2, 3): "b" # } # print(data) #4 a = (1, [2, 3]) # a[1].append(4) # print(a) #5 a = [1, 2, 2, 3] b = set(a) # print(len(a), len(b))

Компании, где спрашивали
Perfomance lab

Ответ от нейросети

sobes.tech AI

Разберём каждый блок кода и его поведение:

 a = [1, 2, 3]
 b = a
 b.append(4)
 print(a)       # [1, 2, 3, 4]
 print(a is b)  # True

Списки — изменяемые объекты. Переменные a и b ссылаются на один и тот же объект. Изменение через b отражается в a. Оператор is показывает, что это один и тот же объект.


 a = 10
 b = a
 print(a is b)  # True (для малых целых чисел в Python)
 b += 5
 print(a)       # 10
 print(b)       # 15

Целые числа — неизменяемые объекты. При b += 5 создаётся новый объект, b теперь ссылается на 15, а a остаётся 10. is для малых чисел может быть True из-за интернирования.


 data = {
     ([1, 2, 3]): "a",
     (1, 2, 3): "b"
 }
 print(data)

Ключи словаря должны быть хешируемыми. Список [1,2,3] — изменяемый и не хешируемый объект, поэтому будет ошибка TypeError: unhashable type: 'list'. Кортеж (1,2,3) — хешируемый, поэтому допустим.


 a = (1, [2, 3])
 a[1].append(4)
 print(a)  # (1, [2, 3, 4])

Кортеж — неизменяемый объект, но если внутри есть изменяемые объекты (например, список), их содержимое можно менять. Здесь список внутри кортежа изменяется.


 a = [1, 2, 2, 3]
 b = set(a)
 print(len(a), len(b))  # 4 3

Множество (set) содержит только уникальные элементы. В списке 4 элемента, в множестве — 3 уникальных.


Итог: важно понимать различия между изменяемыми и неизменяемыми объектами, ссылочной и значимой семантикой, а также требования к ключам словаря.