【发布时间】:2014-05-26 14:53:36
【问题描述】:
在下面的python代码中,变量number被传递给函数addone,并进行了本地复制操作。 number 的值保持不变。
def addone(num):
num = num + 1
print "function: added 1, now %d" % num
number = 5
print "Before:", number
addone(number)
print "After:", number
输出:
Before: 5
function: added 1, now 6
After: 5
但是,列表操作(如 pop、append 等)的行为似乎有所不同。这让我有些困惑。所有列表操作都在全球范围内操作吗?如果是这样,这背后有什么特别的原因吗?
def pop_first(stuff):
popped = stuff.pop(0)
print "function: '%s' was popped!" % popped
words = ["A", "list", "of", "words"]
print "Before:", words
pop_first(words)
print "After:", words
输出:
Before: ['A', 'list', 'of', 'words']
function: 'A' was popped!
After: ['list', 'of', 'words']
【问题讨论】:
-
因为列表是可变的,但整数不是;
num += 1将不同的对象分配给num,stuff.pop更改对象。