Python和C / C ++中的可变/不可变对象

时间:2014-12-11 19:59:03

标签: python c++ c immutability mutable

您无法修改不可变的Python对象,您可以使用新值创建新对象:

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

我在徘徊,与C / C ++中Python的可变/不可变对象最接近的概念是什么?

2 个答案:

答案 0 :(得分:1)

简单:const个对象

更复杂:因为python遵循引用语义,所以可以将所有内容粗略地视为通用指针。一个可以重新分配的指针,但指向它的指针是不能改变的是指向const 的指针,我想你想要的是什么。

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

但是,由于python动态分配其对象,并且C除非被告知这样做,否则不能执行以下操作,并获得与python相同的行为

*p = *p + 1;

所以它仍然缺乏,但它是我认为你可以得到的最接近而没有做出真正做作的东西。

答案 1 :(得分:1)

不变性是一种常见于函数式编程的概念(虽然它对OOP也很重要):

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

C / C ++具有不变性(通过const),但主要是围绕可变性(C比C ++更多)构建,因为指针和访问/修改进程拥有的任意内存的能力。 const甚至有漏洞:

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