当前位置: 首页 > 面试题库 >

为什么python中的列表操作在功能范围之外运行?

陈兴朝
2023-03-14
问题内容

在下面的html" target="_blank">python代码中,将变量number传递给函数addone,并对其进行本地复制。数字的值保持不变。

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']

问题答案:

简短的答案是因为列表是 可变的 ,整数是 不可变的

您无法在适当的位置对整数进行突变,因此我们将其称为“不可变”。考虑到这一点,诸如在整数上加法之类的操作不会修改原始对象,而是返回一个新值-
因此您的原始变量将保持不变。因此,如果我们存储对整数的引用,则只要我们不更改它们之一,它们就只会是同一对象:

>>> foo = 1
>>> bar = foo
>>> foo is bar
True
>>> foo += 2
3
>>> foo
3
>>> bar
1
>>> foo is bar
False

在另一方面列表是“可变的”(可以修改相同的对象基准),和类似的操作pop()发生变异的list就地,改变原。这也意味着,如果您编辑对诸如的可变对象的引用list,原始对象也将被更改:

>>> baz = [1, 2, 3, 4, 5]
>>> qux = baz
>>> qux is baz
True
>>> baz.pop()
5
>>> qux
[1, 2, 3, 4]
>>> baz
[1, 2, 3, 4]
>>> qux is baz
True


 类似资料:
  • 问题内容: 据我了解,该函数实际上是Python 3中的一种对象类型,它像生成器一样动态生成其内容。 在这种情况下,我本以为下一行会花费过多的时间,因为要确定1个四舍五入是否在范围内,必须生成一个四舍五入值: 此外:似乎无论我添加多少个零,计算多少都花费相同的时间(基本上是瞬时的)。 我也尝试过这样的事情,但是计算仍然是即时的: 如果我尝试实现自己的范围函数,结果将不是很好! 使物体如此之快的物体

  • 本文向大家介绍JSP中 操作的功能是什么?,包括了JSP中 操作的功能是什么?的使用技巧和注意事项,需要的朋友参考一下 通过此操作,您可以将文件插入到正在生成的页面中。语法看起来像这样- 与include指令不同,include指令在将JSP页面转换为servlet时插入文件,而该动作则在请求页面时插入文件。 下表列出了与include操作相关联的属性- 序号 属性和说明 1 page 要包含的页

  • 两者都返回一个列表,那么到底有什么区别呢?

  • 问题内容: python中是否存在可以将不断增加的整数列表转换为范围列表的内容 例如,给定集合{0,1,2,3,4,7,8,9,11},我想得到{{0,4},{7,9},{11,11}}。 我可以编写一个程序来执行此操作,但想知道python中是否有内置函数 问题答案: 使用产生了一个简洁但棘手的实现: 输出:

  • 问题内容: 对于什么可以/不能用作python dict的键,我有些困惑。 因此,元组是不可变的类型,但是如果我在其中隐藏一个列表,那么它就不能成为键。.我不能像在模块内部一样轻松地隐藏一个列表吗? 我有一个模糊的想法,认为密钥必须是“可哈希的”,但是我只是承认自己对技术细节的无知。我不知道这里到底发生了什么。如果您尝试使用列表作为键,而将哈希作为其存储位置,那会出什么问题呢? 问题答案: Pyt

  • 我在不同的地方对此进行了研究,包括stackoverflow,但我找不到一个对我有帮助的答案。 我使用的是Windows 7,64位,Atom用于64位Windows。我在目录C:\Users\Austin\Documents\Python中安装了Python 3.6.1。当我试图在Atom中运行一个简单的脚本来测试Python时,它说 “python”不被识别为内部或外部命令、可操作程序或批处理