2014-12-11 1 views
2

Вы не можете изменить неизменные объекты Python, вы можете просто создать новые объекты с новыми значениями:Mutable/неизменные объекты в Python и C/C++

n = 1 
id(n) 
output: 123 
n = n + 1 
id(n) 
output: 140 

Вы можете изменить изменяемые объекты, хотя:

m = [1] 
id(m) 
output: 210 
m.append(2) 
id(m) 
output: 210 

Я блуждаю, что является ближайшей концепцией к изменяемым/неизменяемым объектам Python в C/C++?

+1

Const/constexpr & константные методы – cageman

ответ

1

Простые: const объектов

Более сложный: поскольку питон следует эталонные семантике все можно грубо рассматривать как обобщенный указатель. Указатель, который можно переназначить, но то, на что он указывает, не может быть изменен, является указателем на const, который я думаю, что вы хотите.

int i; 
int j; 
const int *p =&i; 
p = &j; 
*p = 1; // error 

Однако, так как питон динамически распределяет свои объекты, и C не не, если не сказано, чтобы сделать так, не может сделать что-то вроде следующего и получить такое же поведение, как питон

*p = *p + 1; 

Так что этого все еще не хватает, но это самое близкое, что я думаю, что вы можете обойтись без создания чего-то действительно изобретенного.

+0

Благодарим Вас за очень четкое объяснение – Konstantin

1

Неизменность это понятие обычно находится в функциональном программировании (хотя это может быть важно ООП тоже):

https://en.wikipedia.org/wiki/Immutable_object

C/C++ есть неизменность (через сопзЬ), но в основном построены вокруг изменчивостью (C больше, чем C++) из-за указателей и возможности доступа/изменения произвольной памяти, принадлежащей процессу. Даже Const имеет лазейки: объекты

https://en.wikipedia.org/wiki/Const_%28computer_programming%29#Loopholes_to_const-correctness