Python знаешь, а если проверю?

Всем привет, в этой статье будут описаны 10 задачек, примеры кода, которые могут ввести новичка в заблуждение, удачи!

Задача 1:

a = [1, 2, 3] b = a a += [4, 5] print(b)

Варианты ответов:

[1, 2, 3, 4, 5]
[1, 2, 3]
[1, 2, 3, [4, 5]]

В этой задаче список a расширяется оператором +=, который изменяет сам объект списка. Поскольку переменная b ссылается на тот же объект списка, что и a, изменения отражаются и в b.

Правильный ответ: 1

Задача 2

def func(x=[]): x.append(1) return x print(func()) print(func())

Варианты ответов:

[1, 1] [1, 1]
[1] [1, 1]
[1] [1]

В функции func аргумент x по умолчанию является изменяемым объектом (списком). При повторных вызовах функции значение аргумента x сохраняется между вызовами, поэтому изменения, внесенные в одном вызове, видны в следующем.

Правильный ответ: 3

Задача 3

x = 5 y = 5 print(x is y)

Варианты ответов:

True
False
Этот код вызовет ошибку

В Python для малых целых чисел используется механизм кэширования. Поэтому переменные x и y, хоть и созданы независимо, указывают на один и тот же объект в памяти.

Правильный ответ: 1

Задача 4

a = 256000 b = 256000 b+= 1 b-= 1 print(a is b)

Варианты ответов:

True
False
Этот код вызовет ошибку

В Python механизм кэширования не применяется к большим целым числам. Поэтому переменные a и b не указывают на один и тот же объект в памяти, но тут ещё играет ключевую роль арифметики с переменной b.

Правильный ответ: 2

Задача 5

a = "hello" b = "hello" print(a is b)

Варианты ответов:

True
False
Этот код вызовет ошибку

В Python малые строки также могут кэшироваться, поэтому переменные a и b указывают на один и тот же объект в памяти.

Правильный ответ: 1

Задача 6

dict1 = {'a': 1, 'b': 2} dict2 = dict1 dict1['c'] = 3 print(dict2)

Варианты ответов:

{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2}
{'c': 3}

Переменная dict2 ссылается на тот же словарь, что и dict1, поэтому изменения, внесенные в dict1, отражаются и в dict2.

Правильный ответ: 1

Задача 7

text = "python" print(text[6])

Варианты ответов:

"p"
"n"
IndexError

Этот код вызовет ошибку IndexError, так как индекс 6 находится за пределами диапазона строки "python"

Правильный ответ: 3

Задача 8

class Person: slots = ['name', 'age'] person = Person() person.name = "Alice" person.age = 30 person.address = "123 Street" print(person.name, person.age)

Варианты ответов:

Alice 30
Alice 30 123 Street
Alice 30 123 Street

Поскольку объект класса Person определен с помощью __slots__, добавление нового атрибута address вызовет ошибку.

Правильный ответ: 2

Задача 9:

class A: def init(self): self.a = "A" class B: def init(self): self.b = "B" class C(A, B): def init(self): super().init() obj = C() print(obj.a, obj.b)

Варианты ответов:

A B
B A
Ошибка

Ошибка, потому что при вызове super().__init__() у класса C происходит вызов конструктора только у первого суперкласса, то есть у A, поэтому атрибут b отсутствует у объекта obj.

Правильный ответ: 3

Задача 10:

class A: @classmethod def hello(cls): return "Hello from A" class B(A): pass class C(A): @classmethod def hello(cls): return "Hello from C" class D(B, C): pass print(D.hello())

Варианты ответов:

"Hello from A"
"Hello from C"
Ошибка

Метод hello() в классе D наследуется от класса C, поэтому при вызове D.hello() будет использована реализация из класса C.

Правильный ответ: 2

Если ты ошибся хоть в одной задачке то вступай в мой тг канал PythonЗнаешь, чтобы не ошибиться в следующий раз, а если ты всё это уже знал, то все равно вступай, может узнаешь что-то новое!

Начать дискуссию