Fle*_*515 19 python variables list
当我写这段代码时:
polly = "alive"
palin = ["parrot", polly]
print(palin)
polly = "dead"
print(palin)
Run Code Online (Sandbox Code Playgroud)
我以为它会输出这个:
"['parrot', 'alive']"
"['parrot', 'dead']"
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.如何输出它?
Mar*_*ers 48
Python变量包含对值的引用.因此,在定义palin列表时,传入引用的值polly,而不是变量本身.
您应该将值想象为气球,变量是与这些气球相关联的线程."alive"是一个气球,polly只是该气球的一个线程,该palin列表有一个不同的线程绑定到同一个气球.在python中,列表只是一系列线程,所有线程都从0开始编号.
你接下来要做的是将polly字符串绑定到一个新的气球"dead",但列表仍然保持与"alive"气球相关的旧线程.
您可以"alive"通过索引重新分配列表来替换列表中保存的线程以引用每个线程; 在你的例子中的线程1:
>>> palin[1] = polly
>>> palin
['parrot', 'dead']
Run Code Online (Sandbox Code Playgroud)
在这里,我简单地将palin[1]线程polly绑定到同一个东西上,无论可能是什么.
请注意,在任何蟒集合,如dict,set,tuple,等仅仅是线程的集合了.其中一些可以将它们的线程换成不同的线程,例如列表和dicts,这就是使python中的某些内容"可变"的原因.
另一方面,字符串不可变.一旦你定义了一个像"dead"或的字符串"alive",它就是一个气球.你可以用线程(变量,列表或其他)绑定它,但你不能替换它内部的字母.您只能将该线程绑定到一个全新的字符串.
python中的大多数东西都可以像气球一样.整数,字符串,列表,函数,实例,类都可以绑定到变量,或绑定到容器中.
您可能也想阅读Ned Batchelder关于Python名称的论文.
当您将字符串放入列表中时,列表将保存该字符串的副本。字符串最初是变量,字面值,函数调用的结果还是其他无关紧要;当列表看到它时,它只是一个字符串值。以后更改生成的字符串将永远不会影响列表。
如果要存储对值的引用,该引用将在该值更改时注意到,通常的机制是使用包含“被引用”值的列表。将其应用于您的示例,最后得到一个嵌套列表。例:
polly = ["alive"]
palin = ["parrot", polly]
print(palin)
polly[0] = "dead"
print(palin)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14071 次 |
| 最近记录: |