当我编写这段代码时:
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
绑定到相同的东西,无论可能是什么。
请注意,在任何蟒集合,如dict
,set
,tuple
,等仅仅是线程的集合了。其中一些可以将其线程换成不同的线程,例如列表和字典,这就是使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: 数
问题内容: 给出清单 您可以使用诸如 但是,我想基于代码中其他位置设置的变量来执行此操作。我可以很容易地做到这一点 但是,我该如何为另一个做呢?我尝试用列表建立索引: 但这是行不通的。我也尝试过使用字符串: 但这也不起作用。 这可能吗? 问题答案: 那是为了: 与使用相同。