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

了解Python中的可变性

国斌斌
2023-03-14
问题内容

从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。

7年前关闭。

我有这个片段:

a = [1,2,3]
b = a
b = [4,5,6] # a doesnt change

和这个:

a = [1,2,3]
b = a
b[0] = 5 # a also changes

b初始化如何在决定mutability的过程中发挥作用a


问题答案:

创建列表并将其分配给变量时,例如

a = [1, 2, 3]

创建一个对象,变量a包含对该对象的引用。当你做

b = a

您在b中分配了相同的引用,因此a和b现在都指向您的列表。所以当你执行

b[0] = 5

您更改相同的列表。

您可以通过使用id()函数看到此操作,该函数返回对象的内存地址:

>>> a = [1, 2, 3]
>>> b = a
>>> id(a), id(b)
(140454191340720, 140454191340720)

它们是相同的。关键是,a和b本身不是列表,它们指向列表。

当您执行以下操作时:

a = [1, 2, 3]
b = a
b = [2, 3, 4]

您首先将引用分配给指向该列表的列表,然后再为其分配新引用。

顺便说一句,当您按照以下方式进行操作时,这可能会在后面咬您

def foo (a=[]):
    a.append(42)
    return a

由于参数a在每次调用时都指向同一列表,因此,如果您在没有参数的情况下调用此函数5次,则该列表将包含5x 42:

foo(); foo(); foo(); foo();
print(foo())
>>> [42, 42, 42, 42]


 类似资料:
  • 问题内容: 我目前正在阅读Python,目前正在研究生成器。我发现很难回头。 从Java的背景出发,是否有Java的等效语言?这本书讲的是“生产者/消费者”,但是当我听说线程的时候。 什么是发电机,为什么要使用它?显然,无需引用任何书籍(除非您可以直接从书籍中找到一个体面,简单的答案)。也许举一些例子,如果您感到慷慨! 问题答案: 注意:本文采用Python 3.x语法。† 一个发电机仅仅是它返回

  • 本文向大家介绍详解Python的三种可变参数,包括了详解Python的三种可变参数的使用技巧和注意事项,需要的朋友参考一下 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或列表 关键字参数 关键字参数在python中习惯用**kw表示,可以传入0到任意多个“关键字-值”,参数在函数内

  • 问题内容: 我正在学习语言,这些要点摘自的规范。 虽然我能理解分1-4,我很困惑的点和: 5. 在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并在最里面的包含块的末尾结束。 6. 在函数内部声明的类型标识符的范围始于TypeSpec中的标识符,并终止于最里面的包含块的末尾。 这是我用来了解Go范围的代码: 据此,我

  • 本文向大家介绍python中可变和不可变之间的区别?,包括了python中可变和不可变之间的区别?的使用技巧和注意事项,需要的朋友参考一下 Python定义了对象的各种数据类型。这些对象存储在内存中,对象的可变性取决于类型,例如列表和字典是可变的,这意味着我们可以更改其内容而无需更改其标识。其他对象,例如整数,浮点数,字符串和元组,都无法更改为索引分配的值。 List是可变的:List就像数组一样

  • 问题内容: 对象的可评估字符串表示形式(可以它,这意味着它是评估为Python对象的字符串表示形式) 换一种说法: 问题: 为什么我得到双引号?(这样做的时候我不懂) 为什么我得到时却得到而不是是对象? 问题答案: 因此,名称x将附加到字符串。例如,当你致电时,解释器放而不是,x然后致电。 实际调用一个魔术方法的,这给串包含该值的表示分配给。因此,它会在字符串”“中返回结果”。的想法是给出一个包含

  • 问题内容: sentence = “The quick brown fox jumped over the lazy dog.” characters = {} 我不知道在做什么,其余的一切似乎都非常简单。 问题答案: dict的方法(例如)与索引dict一样,不同之处在于,如果缺少键,则返回默认值(如果不使用键,则返回默认值(如果仅使用一个参数调用,则键为默认值)是)。 因此,一个等效的Pyth