在the Python documentation中,解释了s * n
或n * 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)
答案 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]