# 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))
Answer from AI
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 уникальных.
Итог: важно понимать различия между изменяемыми и неизменяемыми объектами, ссылочной и значимой семантикой, а также требования к ключам словаря.