【问题标题】:how is original value from immutable variable accessed? [duplicate]如何访问不可变变量的原始值? [复制]
【发布时间】:2015-03-24 00:41:32
【问题描述】:

不可变变量:一种变量,如果被修改则存储它的原始版本。 问题:如何在 Python 中访问该变量的旧版本?还是在 Java 中?或任何其他支持这种“持久数据结构”的语言? 还是我对不可变变量的定义错了?

在我更改了一个变量后,比如说,python

name = "nice name"
name = "bad name"

现在,我如何检索 var name 的旧值?

注意:这个问题与它被标记为重复的问题不同,因为这个问题是关于变量的内存位置,另一个问题是关于变量范围

【问题讨论】:

标签: java python data-structures datapersistance immutablelist


【解决方案1】:

在您的示例中,name 是一个指向值的引用。

在您的第一行中,name 指向不可变字符串“nice name”。

然后在第二行中,更新 name 以指向不同的不可变字符串“bad name”。

此时,没有变量引用“好名字” - 所以它不再可用。

str 类型是不可变的,因为“好名”值本身无法更新。对字符串的任何操作都会创建一个新的内存块来存储修改后的字符串。在您的示例中,“好名”和“坏名”存储在不同的内存块中 - 您要更新的只是对内存块。

【讨论】:

  • 那么,保持该值的唯一方法是将旧指针提供给另一个变量?
  • 如果是,那“前一块内存”的意义是什么?
  • 如果你有一个变量指向内存,那么你仍然可以访问它。但是一旦你没有指向内存的变量,内存就会被认为是未引用的,并且将被garbage collected 即清除,而无需您明确要求它。
  • 谢谢!这有帮助,我有最后一个问题,这种持久性数据结构是编程语言的设计特性吗?还是限制?我的意思是“缺陷”?
  • 这取决于你的观点。对于函数式程序员来说,不可变变量和持久数据结构是正常的,而变异是一种“缺陷”。命令式和面向对象的程序员不同意。但我无法在 600 个字符的评论中,甚至在完整的 StackOverflow 答案中解释这一点。在确定不可变变量是“缺陷”之前,您应该阅读一些有关函数式编程的书籍。
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多