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 лекция
Недоступен
Преобразование типов
Преобразование типов
Комментарии (19)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Серафим Уровень 6
26 декабря 2025
Говорит что задачу "неизвестность" нельзя выполнить на JavaRush!
Роман Уровень 31
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:
Long_byte Уровень 55
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 ссылается на другой список, хоть и такой же. По условия обе переменных должны ссылаться на один и тот же список.
Predein.nik Уровень 23
4 апреля 2025
Прошу помочь с пояснением: num2=int(num2) вот так в else работает int(num2) вот так нет
Slevin Уровень 5
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)
Дмитрий/MrJonson Уровень 92
23 января 2025
Задача # Неизвестность # Напишите программу, которая запрашивает у пользователя два числа. # Если пользователь не вводит значение (пустая строка), используйте # значение по умолчанию None для этого числа. # Вычислите и выведите сумму этих чисел. # Напишите тут ваш код Пишу a = int(input("Введите 1е число: ") or 0) b = int(input("Введите 2е число: ") or 0) a = a if a != 0 else None b = b if b != 0 else None if a is None or b is None: print("Сумма чисел не известна") else: print(a + b) Код работает Проверка не правильно Пишет мне укажите None вместо 0 Переписываю a = input("Введите 1е число: ") or None b = input("Введите 2е число: ") or None if a is None or b is None: print("Сумма чисел не известна") else: print(int(a) + int(b)) Опять не правильно хотя все работает и какую то чушь в рекомендациях после 10 попыток выдает мне код a = input("Введите первое число: ") b = input("Введите второе число: ") a = None if a == "" else float(a) b = None if b == "" else float(b) if a is None or b is None: print("Сумма чисел неизвестна") else: sum_result = a + b print("Сумма чисел:", sum_result) Вопрос почему так правильно а мои варианты не правильно? Складывается впечатление как будто описание задач и Pytest какая то укуренная блондинка писала
_den Уровень 65
4 февраля 2025
не проверял, но может из-за "Сумма чисел не известна", неизвестно слитно)
_den Уровень 65
4 февраля 2025
ну да, слитно принимает. тут если что можно отправлять новые решения для решенных задач
Sergey O. Уровень 64
5 февраля 2025
в первом случае у тебя не получится None, а во втором ты забил на вещественные числа. Если во втором случае int заменить на float, то всё принимает.
Optimus Уровень 7
11 февраля 2025
Реально в задаче на написано, что тип данных float нужен
Anton Уровень 5
1 января 2025
"Напишите программу, которая создает два списка, присваивает один из них другой переменной"... А два то зачем создавать? Один создали, присвоили и далее по условию. "должна присвоить создать вторую переменную и присвоить" - "присвоить создать"?
Alexander Уровень 1
27 декабря 2024
Задача про None странная. Непонятно зачем лишние действия делать, если без None можно узнать о пустых переменных.
UnknownReboot Уровень 30
17 декабря 2024
Немного не понятно про оператор is из лекции
Anonymous #2637008 Уровень 17 Expert
29 декабря 2024
оператор is сравнивает ссылки проверяемых переменных, если обе ссылки ведут на один и тот же объект в памяти, то возращается true, иначе false оператор == сравнивает значение переменных, а не на что они ссылаются.
Roman Уровень 21
3 января 2025
Красота тернарных операторов)