持久性与不可变数据结构

时间:2012-04-05 19:09:11

标签: data-structures immutability object-persistence

持久性和不可变数据结构有什么区别吗?维基百科在讨论持久性时指的是不可变数据结构,但我觉得两者之间可能存在细微差别。

2 个答案:

答案 0 :(得分:21)

Immutability 是一种实现技术。除此之外,它还提供持久性,这是一个接口。持久性API类似于:

  • version update(operation o, version v)对版本o执行操作v,返回新版本。如果数据结构是不可变的,则新版本是新结构(可以共享旧结构的不可变部分)。如果数据结构不是不可变的,则返回的版本可能只是版本号。版本v仍然是有效版本,并且由于此更新,它不应以任何observe方式更改 - 更新仅在返回的版本中可见,而不在v
  • data observe(query q, version v)会在版本v处观察数据结构,而无需更改或创建新版本。

有关这些差异的更多信息,请参阅:

答案 1 :(得分:14)

是的,有区别。创建后不能以任何方式修改不可变数据结构。有效修改它的唯一方法是制作一个可变副本或类似的东西(例如,稍微修改传递给新构造函数的参数)。另一方面,持久性数据结构在暴露的API似乎允许更改数据结构的意义上是可变的。但事实上,任何更改都将保留指向现有数据结构的指针(因此也包含每个前面的结构);它们似乎只是改变数据结构,因为暴露的API返回一个新指针,可能包含指向前一个数据结构子集的指针(在树中,例如,我们将指向其子树未因结果而发生变化的节点)操作)。