JavaRush /Курсы /Модуль 1: Python Core /Важные дополнения

Важные дополнения

Модуль 1: Python Core
4 уровень, 5 лекция
Открыта

6.1 Переменные — это ссылки

В Python переменные представляют собой ссылки на объекты, а не саму переменную. Это означает, что, когда вы создаете переменную в Python, вы просто создаете ссылку на объект в памяти.

Эта особенность языка имеет важные последствия для работы с переменными, особенно при передаче объектов в функции или их присваивании другим переменным.

Когда вы создаете переменную и присваиваете ей значение, Python выделяет объект в памяти для этого значения и делает переменную ссылкой на этот объект. Если вы присвоите одну переменную другой, новая переменная будет ссылаться на тот же объект, что и исходная переменная. Это означает, что изменения, сделанные через одну переменную, отразятся и на другой, если объект изменяемый.

Пример:


a = [1, 2, 3]
b = a
b.append(4)
print(a)  # Выведет: [1, 2, 3, 4]

Мы добавляли число 4 в переменную b, но он добавился и в список в переменной a, т.к. на самом деле обе переменные — это всего лишь ссылки на объект список [1, 2, 3].

6.2 Неизменяемые объекты

В Python объекты делятся на изменяемые и неизменяемые. Изменяемые объекты, такие как списки и словари, можно изменять после создания.

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

Присваивание никогда не меняет объект:


a = 5  # a хранит ссылку на объект 5
b = a  # b тоже хранит ссылку на объект 5
b = 3  # теперь b хранит ссылку на объект 3
print(a)  # Выведет: 5               

Объект можно изменить, вызвав его функцию:


a = [1, 2, 3]
b = a
b.append(4)
print(a)  # Выведет: [1, 2, 3, 4]                              

Но есть неизменяемые объекты, у которых есть функции. Эти функции не меняют исходный объект, а возвращают новый, который содержит новый результат:


name = "Alex"
print(name)  # Выведет: Alex
name2 = name.lower() 
print(name2)  # Выведет: alex               

Строки — это неизменяемые объекты. И хотя у них есть методы, эти методы никогда не меняют объект строки — вместо этого они всегда возвращают новую строку (новый объект). Старый объект при этом остается прежним.

6.3 Работа с типом None

В Python есть специальный тип данных, представляющий отсутствие значения — None. Он используется для обозначения пустых переменных или как возвращаемое значение функций, которые ничего не возвращают. Понимание None важно для управления поведением программы, особенно в контексте условных операторов и работы с данными.

Основы использования None

None это единственный экземпляр класса NoneType. Он используется для указания того, что переменная не имеет значения. В условиях None оценивается как ложное (False).


a = None
if a:
    print("a is True")
else:
    print("a is None or False")

Сравнение с None

Проверка переменной на None должна производиться с использованием оператора is, а не ==. Оператор is проверяет идентичность, не равенство значений.


a = None
if a is None:
    print("a is None")
else:
    print("a has value")

None в функциях

None часто используется в функциях, которые не должны явно возвращать значение. Если функция не возвращает значение, она неявно возвращает None.


def func():
    print("This function returns None")

result = func()
print(result)  # Выведет: None

None и списки

None может быть использован в списках, кортежах или других коллекциях для указания отсутствия элемента на определенной позиции.


my_list = [1, None, 3]
print(my_list)  # Выведет: [1, None, 3]
2
Задача
Модуль 1: Python Core, 4 уровень, 5 лекция
Недоступна
Ты ему слово, он тебе ссылку
Ты ему слово, он тебе ссылку
2
Задача
Модуль 1: Python Core, 4 уровень, 5 лекция
Недоступна
Неизвестность
Неизвестность
1
Опрос
Преобразование типов, 4 уровень, 5 лекция
Недоступен
Преобразование типов
Преобразование типов
Комментарии (26)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Iulian Уровень 13
16 сентября 2026
не знаю почему но на эту задачу потратил целый час по итогу это верно a = input("Введите чсло") b = input("Введите число") a = int(a)if a else None b = int(b)if b else None if a is not None and b is not None : print (a+b) else: print("Сумма чисел неизвестна")
Iulian Уровень 13
16 сентября 2026
a = input("Введите чсло") b = input("Введите число") if a == "": a = None else: a = float(a) if b == "": b = None else: b = float(b) if a is None or b is None: print("Сумма чисел неизвестна") else: print(a + b) что не так
Олег Сычев Уровень 6
10 мая 2026
10.05.2026 - 5-ый lvl завершен
Дмитрий Уровень 9
25 февраля 2026
Эта задача не может быть запущена на сервере JavaRush. Используйте свою любимую IDE.
Серафим Уровень 26
26 декабря 2025
Говорит что задачу "неизвестность" нельзя выполнить на JavaRush!
Роман Уровень 93
23 июля 2025
a = input("Введите первое число: ") b = input("Введите второе число: ") a = int(a) if a else None b = int(b) if b else None if (a and b): print(a + b) else: print("Сумма чисел неизвестна") Мне кажется проверка не очень интеллектуальная. Зачем заставлять использовать or если можно and? В самом уроке пишите, что None можно использовать в условии. Кстати такое условие тоже работает if not a or not b:
Gunslinger Уровень 13
22 августа 2026
Тебе не кажется. Тут вечно гадаешь, о чём думал составитель. Но на 93 думаю ты и сам это уже понял ;)
Long_byte Уровень 60
7 июня 2025

my_list = [1, 2, 3]
second_list = [1, 2, 3]
if second_list is my_list:
    print("yes")
else:
    print("no")

выводит "no" а если так

my_list = [1, 2, 3]
second_list = [1, 2, 3]
if second_list == my_list:
    print("yes")
else:
    print("no")
выводит "yes" получается сравнивания через == сравнивает содержимое обьекта а через оператор "is" ссылку?
21 июля 2025
a = [1, 2, 3] b = a if b is a: print("True") else: print("False") Тут вторая переменная должна указывать на первую и второй переменной автоматически присваивается значение первой (по второму условию - Программа должна создать вторую переменную и присвоить ей список из первой переменной.) Далее, в условии is - сравнивает обе переменных на идентичное содержание. В случае Вашей программы переменная my_list ссылается на один список, а переменная second_list ссылается на другой список, хоть и такой же. По условия обе переменных должны ссылаться на один и тот же список.
EvgenyXIV Уровень 33
7 марта 2026
== это равенство разных объектов, совпадение объектов (в т.ч. совпадение с самим собой) is это проверка идентичности - что это один и тот же объект
Predein.nik Уровень 27
4 апреля 2025
Прошу помочь с пояснением: num2=int(num2) вот так в else работает int(num2) вот так нет
Slevin Уровень 59
21 июня 2025
без оператора присваивания, вы просто создали новое число, которое не присвоено никакой переменной, вы не изменили объект "num2"
Дмитрий Уровень 27
11 февраля 2025
Не могли бы вы формулировать вопросы в опроснике чуть поточнее? Вопрос 8 - вниз до ближайшего целого может округлять и math.floor() и int(). Возможно стоило сформулировать вопрос: "Какая функция _предназначена_ для округления числа вниз..."
SWK Уровень 26
13 марта 2025
floor округляет, а int меняет тип. Превращение вещественного в ближайшее снизу целое в процессе приведения типов - побочное действие. Строки int() не округляет в процессе приведения. И даже "ровные" float int() не округляет. Ну, почти...😀
Александр Уровень 93
7 февраля 2025
Где-то была таблица сравнения типов? a = input("Введите 1е число: ") or None print(a) print(type(a)) print(1 if "" or None else 0) print(1 if "0" or None else 0) print(1 if 0 or None else 0) print(1 if False or None else 0)