可变对象和不可变对象在所有编程语言中的实现都是一样的吗?

Mutable and Immutable objects are implemented the same in all programming languages?

不变性的主要思想在 OOP 和函数式编程的范围内保持不变,或者,例如,Java 和 Python 有自己的不变性版本。更具体地说,以下是否适用于所有语言?

我问是因为例如在脚本语言中对象是通过引用传递的(在其他语言中是通过值传递的,或者在 C 中我们两者都有)所以这不会改变整个不变性的概念吗?

我对 python 中可变与不可变之间的区别的理解是,第一个可以通过索引更改。比如下面的x列表可以通过索引改变!

x = [1,2,3]
x[0] = 10

y = (1,2,3)
y[0] = 10 # this will raise an error. tuple is not mutable. 

y = x 

id(y) == id(x) #gives true. since y is a reference to x
y[0] = 10
print(y)
[10, 2, 3]
print(x)
[10, 2, 3] # x is changed as well! y and x are same same.

每次您创建具有唯一名称的列表或集合或元组时,即使它们包含相同的数据集,它们仍然不是映射到内存中的相同列表。每个都有其唯一的ID。

如果你有任何对象,即使是文字对象,它也需要在内存中使用一些 space。

这个内存需要被语言运行时间变异,不可变和不可变都是一样的。因此,可变对象在创建对象时会改变内存。

因此,不可变对象是确保在编译时不被更改或在程序 运行 时受到 运行 时间保护的对象。

In python two immutable objects with the same value also have the same id, two references one value.

我认为这根本无法保证。例如。

x = (1,2,3)
y = (1,2,3)
x is y
// => False

当我 运行 它在我的回复中。如果它类似于 Common Lisp 和 Java,则可能会发生实现可以自由重用相同文字的内存位置,因此任何布尔结果都是可以接受的。