【发布时间】:2016-06-09 01:01:39
【问题描述】:
我有以下 python 代码:
def make_great(l):
l = ['The great ' + magician for magician in l]
magicians = ['Tom']
make_great(magicians)
print(magicians)
print 语句打印原始列表,而不是由make_great() 函数修改的列表。我试图找出一种方法来修改 python 列表的每个元素,而不显式访问它的索引,然后为该索引重新分配一个新值。 magicians 列表现在不会指向基于 Python 内存模型的理解形成的新列表吗?我猜我没有得到想要的结果,因为这是一个范围界定问题?但是当我传入magicians 时,它会替换函数参数中的l,因此python 解释器实际上会看到magicians = ['The ...?
【问题讨论】:
-
问题是你正在修改局部变量
l来引用一个新对象。相反,您应该修改l引用的对象。 -
我很困惑,当我使用索引符号
l[i]来修改列表时,为什么不认为是局部变量,但是当我使用=运算符重新分配@987654331 @ 到一个新列表,它现在被认为是本地的? -
@MutatingAlgorithm 考虑将
l变量名称重命名为lst或其他更好读的名称,因为它可以防止与数字1混淆。