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

Python列表不反映变量更改

鲁彬炳
2023-03-14
问题内容

当我编写这段代码时:

polly = "alive"
palin = ["parrot", polly]
print(palin)
polly = "dead"
print(palin)

我认为它将输出以下内容:

"['parrot', 'alive']"
"['parrot', 'dead']"

但是,事实并非如此。我如何得到它来输出?


问题答案:

Python变量包含对 值的 引用。因此,在定义palin列表时,您传入所引用的值polly,而不是变量本身。

您应该将值想象为气球,变量是绑定到那些气球的线程。"alive"是一个气球,polly只是该气球的一个线程,并且palin列表具有与该气球相关的
不同 线程。在python中,列表只是一系列线程,所有线程均从0开始编号。

接下来的操作是将polly字符串绑定到新的气球上"dead",但是列表仍然保留在与"alive"气球相连的旧线程上。

您可以"alive"通过按索引重新分配列表以引用每个线程,从而将该线程替换为列表中保留的线程。在您的示例中,该线程是1

>>> palin[1] = polly
>>> palin
['parrot', 'dead']

在这里,我简单地将palin[1]线程polly绑定到相同的东西,无论可能是什么。

请注意,在任何蟒集合,如dictsettuple,等仅仅是线程的集合了。其中一些可以将其线程换成不同的线程,例如列表和字典,这就是使python中的某些东西“可变”的原因。

另一方面,字符串是 不可 变的。一旦定义了类似"dead"或的字符串"alive",它就是 一个
气球。您可以将其与线程(变量,列表或任何其他东西)绑定在一起,但是不能替换其中的字母。您只能将该线程绑定到一个 全新的 字符串。

python中的大多数东西都可以像气球一样。整数,字符串,列表,函数,实例,类都可以绑定到变量中,也可以绑定到容器中。

您可能还想阅读Ned
Batchelder关于Python名称的论文



 类似资料:
  • 问题内容: 我需要在Python中创建列表列表,因此输入了以下内容: 该列表如下所示: 然后,我更改了最内在的值之一: 现在我的列表如下所示: 这不是我想要或期望的。有人可以解释发生了什么,以及如何解决吗? 问题答案: 当您编写时,您基本上得到了。也就是说,具有3个对same的引用的列表。然后,当您修改此单曲时x,可以通过对其的所有三个引用来看到它: 要修复它,您需要确保在每个位置创建一个新列表。

  • 问题内容: 如果我有: 有没有办法找到将要使用的绑定?我看了看,但无法确定某些内容是否适用。换句话说,我可以定义以下内容: 问题答案: 您不必在这里使用该模块。 在Python 2.7中工作

  • 问题内容: 我知道在Java中通过引用传递它们时,它们是可变的。 我想确切知道它的原始列表和子列表的内存地址中发生了什么。 子列表和原始列表是否引用相同的对象? 以下是反映从子列表到主原始列表所做更改的代码示例。 问题答案: 根据此事: 列表subList(int fromIndex,int toIndex) 返回此列表中指定的fromIndex(包括)和toIndex(不包括)之间的视图。(如果

  • 本文向大家介绍python不可变变量?相关面试题,主要包含被问及python不可变变量?时的应答技巧和注意事项,需要的朋友参考一下 不可变对象是指不可以被引用改变的对象,如字符串 #

  • 问题内容: 在这一点上,这已经是一个老问题了,我可能已经阅读了有关SO的所有相关主题。 但是要点。我需要一些建议或更正吗? 出于某种原因,我们有两种可生成的Jsons: 和 对象和数组。还有其他参数,但在这里无关紧要。每个请求的“ id”都不同。有时是userId,PortfolioId等。因此我得到“ id”并将其传递给相关的var。 很长一段时间我一直在处理第一种情况。并这样创建POJO: 数

  • 问题内容: 给出清单 您可以使用诸如 但是,我想基于代码中其他位置设置的变量来执行此操作。我可以很容易地做到这一点 但是,我该如何为另一个做呢?我尝试用列表建立索引: 但这是行不通的。我也尝试过使用字符串: 但这也不起作用。 这可能吗? 问题答案: 那是为了: 与使用相同。