s * n或n * s的工作

时间:2018-07-25 15:12:47

标签: python python-3.x

the Python documentation中,解释了s * nn * s表示未复制序列s中的项目;它们被多次引用。我能够从理论上获得该信息,但无法理解他们给出的示例:

>>> lists = [[]] * 3
>>> lists
[[], [], []] # Output
>>> lists[0].append(3) 
>>> lists
[[3], [3], [3]] # Output

我很困惑,因为如果我们对字符串做类似的事情,它的行为会有所不同:

list_of_str = (["str"] * 3)
print(list_of_str)
list_of_str[0] = "str_1"
print(list_of_str)

1 个答案:

答案 0 :(得分:1)

您的示例所做的与他们的示例不同,因为list_of_str[0] = anything只会替换列表中的第一个条目。不管是副本还是唯一实例都没关系。

举个更好的例子,您需要list_of_str[0][0] = 'S'之类的东西来修改字符串本身。但是您不能这样做,因为Python中的字符串是不可变的。

如果您想确定性地表明条目指向的是同一字符串,请使用id函数:

>>> list_of_str = (["str"] * 3)
>>> print(list(map(id, list_of_str)))
[140243211229088, 140243211229088, 140243211229088]