товарищи. Я долгое время программировал на 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Задача стоит в том, чтобы удалить все дубли из коллекции, затем отсортировав, преобразовать числа в строкиНикак не могу сообразить, что не так!
Здравствуйте имеются 3 entity (Doctor, Patient, Recipe) которые с помощью Hibernate замапленны в БДRecipe имеет в качестве поля Doctor и Patient