描述列表如何工作的这个属性是什么术语?

Dro*_*ans 1 python terminology list definition

我正在寻找适当的术语来描述集合对象的这个众所周知的属性,更重要的是,当变量用于引用它们的元素时,堆栈图的变化方式如下:

>>> x = 5
>>> l = [x]
>>> x += 1
>>> l
[5]
>>> x
6
Run Code Online (Sandbox Code Playgroud)

列表对变量执行的操作的名称是什么,x以防止它被绑定到原始值的任何更改x?屏蔽?共享结构?列表绑定?使用这些条款的Google搜索没有任何回复.

这是一个更详细的例子(但遗憾的是没有定义).

列表结构共享的示例

感谢ocw.mit.edu

Kar*_*tel 5

列表对变量x执行的操作的名称是什么,以防止它绑定到x的原始值的任何更改?屏蔽?共享结构?列表绑定?使用这些条款的Google搜索没有任何回复.

因为列表没有做任何事情,并且它不是集合的属性.

在Python中,变量是名称.

>>> x = 5
Run Code Online (Sandbox Code Playgroud)

这意味着:x应该是值的名称5.

>>> l = [x]
Run Code Online (Sandbox Code Playgroud)

这意味着:l应该是通过获取xnames(5)的值,并使用该值([5])创建一个元素列表而得到的值的名称.

>>> x += 1
Run Code Online (Sandbox Code Playgroud)

x += 1被重写到x = x + 1这里,因为整数是不可变的.你不能让这个值5增加1,因为那样就会5了.

因此,这意味着:x应该停止成为当前名称的名称,并开始成为数学表达式产生的值的名称x + 1.即,6.

这就是参考语义的发生方式.没有理由期望列表的内容发生变化.


现在,让我们看看价值语义会发生什么,用一种假设的语言看起来就像Python,但处理变量的方式与它们在C中处理的方式相同.

>>> x = 5
Run Code Online (Sandbox Code Playgroud)

这现在意味着:x是一块内存的标签,用于表示数字的表示5.

>>> l = [x]
Run Code Online (Sandbox Code Playgroud)

这现在意味着:l是一块内存的标签,它包含一些列表结构(可能包括一些指针等),它将以某种方式初始化,以便它表示一个包含1个元素的列表,该列表具有值5(从的x变量).它不能被x逻辑地包含,因为它是一个单独的变量,我们有价值语义; 所以我们存储一份副本.

>>> x += 1
Run Code Online (Sandbox Code Playgroud)

现在这意味着:增加x变量中的数字; 现在是6.该列表再次不受影响.

无论您的语义如何,都不能以这种方式影响列表内容.期望列表内容发生变化意味着您的解释不一致.(如果您将代码重写为,这将变得更加明显l = [5]; x = l[0]; x += 1.)

  • @Droogans,更多地考虑了这一点并更仔细地阅读了Karl的帖子,答案就在那里:"参考语义." (2认同)