0

在这里考虑这个列表:

example=[]  

还有一个:

python=["hi","bye","hello","yes","no"]

如果我决定将 python 中的一个元素添加到示例中,是否会创建该元素 b 的副本,或者变量 python 是否会丢失一个元素。

example+=[python[0]]

那么字符串“hi”是否会被复制或转移到使用上述示例的示例

4

5 回答 5

2

字符串“hi”将被拆分为字符并example在您执行时分配example+=python[0]

所以example在这种情况下将包含['h','i'].

此外,列表python不会丢失任何元素。

于 2013-07-29T17:47:12.563 回答
1

不,不会有“转移”。这很容易检查,只需在操作后打印值即可。

相反,列表示例将附加第一个字符串的元素:

>>> f = []
>>> f+= ["hi", "there"][0]
>>> f
['h', 'i']

发生这种情况是因为a += b在概念上* 等效于a = a+b, 并a+b创建了一个列表,其中包含 的所有元素,a后跟 的元素b。字符串是序列,其中的元素是由单个字符组成的字符串,这就是你得到这种行为的原因。

*存在差异,尤其是那list + nonlist行不通。

于 2013-07-29T17:47:49.940 回答
0

那么字符串“hi”会被复制或转移吗?

不,字符串"hi"既不会被复制也不会被转移。相反,example绑定到的对象的长度将增加一,并且引用example[0]将绑定到绑定到的任何对象python[0]。此外,引用python和它所绑定的对象都不会被修改。

另请注意,您的问题在示例中存在错误。你实际上说的地方,

example += python[0]

你肯定是想说:

example += [python[0]]
于 2013-07-29T17:51:24.600 回答
0

Python 列表仅存储对元素的引用。元素(这里是字符串)存储为外部对象。

任何 Python 赋值都只复制一个引用值。这样,列表被实现为存储引用的动态数组。

如果将字符串插入列表,则不会复制源字符串对象,只会复制对同一对象的引用。源元素(此处)在赋值右侧使用时python[0]不会从列表中删除。python它只是被阅读并且保持不变。

于 2013-07-30T06:12:32.130 回答
-2

您必须执行以下操作 example.append(python[0] 这将采用 'hi' 并复制到示例

于 2013-07-29T17:49:32.927 回答