товарищи. Я долгое время программировал на Java, сейчас затронул Python и в голове немного помешалось. Помогите выпутаться) Прав ли я в следующем? В Java у нас есть примитивные и ссылочные переменные. Разница в том, что примитивные переменные ссылаются на непосредственно значение, а ссылочная - на ссылку, ведущую в более глубокую область памяти. А в Python у нас все переменные аналогичны ссылочным в Java.
В Java есть примитивные типы и есть объекты. Переменные примитивных типов содержат значение, а переменные типа class содержат ссылки на объекты.
В Python идея ООП доведена до абсолюта и:
Everything Is an Object
то есть всё является объектами, то есть с точки зрения Java программиста - все переменные в Python являются ссылками на объекты.
Вы правы.
Наиболее важные отличия Python от Java:
1) Все переменные - это просто указатели.
Пример:
>>> x = [1, 2]
>>> y = x # переменная y ссылается на тот же список, что и x
>>> print(y)
>>> y.append(3) # добавим элемент к y
>>> print(x) # x тоже изменился
[1, 2, 3]
>>> x = 4 # присвоим x какое-то иное значение
>>> print(y) # y не поменялся
[1, 2, 3]
2) Все переменные - это объекты.
>>> x = 3.0
>>> x.is_integer() # вызовем метод
True
>>> type(x) # проверим тип переменной
<type 'float'>
>>> x.__class__ # тип - это просто название класса
<type 'float'>
Коротко говоря все переменные в python это ссылки на какие то объекты, даже переменные примитивных типов. Подтверждение этому можно увидеть например так:
>>> a = 5
>>> type(a)
<class 'int'>
Но при этом любой объект типа int является неизменяемым (immutable). Пусть мы написали a = 5. Мы никаким образом не можем изменить содержимое области памяти на которую ссылается a, можем только начать ссылаться на другую область, например написав a = 6. Если проводить аналогии с Java то в python доступен только класс Integer но не примитивный тип int из Java
Интересный факт: для типа int числа до 256 кешируются, то есть a = 5 и b = 5 это один и тот же объект (a и b ссылаются на одну область памяти), но при этом a = 257 и b = 257 это уже два разных объекта (a и b ссылаются разные области памяти)
>>> a = 256
>>> b = 256
>>> id(a)
10922656
>>> id(b)
10922656
>>> a = 257
>>> b = 257
>>> id(a)
139993530665008
>>> id(b)
139993530663408
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости