如何在Python2.7内存中使用临时变量

2024-04-27 17:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我将“haystack”保存在一个临时变量中,但是当我修改“haystack”时,临时变量也会更改。为什么?请帮忙?正常吗?在PHP中我没有这个问题。

# -*- coding:utf-8 -*-

haystack = [1,'Two',3]   
tempList = haystack   
print 'TempList='    
print tempList   
iterable = 'hello'  
haystack.extend(iterable)   
print 'TempList='   
print tempList

返回控制台

TempList=
[1, 'Two', 3]
TempList=
[1, 'Two', 3, 'h', 'e', 'l', 'l', 'o']

但我没有修改变量“tempList”。
请帮忙。谢谢。


Tags: helloiterableutfphpprinttwocodingextend
3条回答

tempListhaystack只是绑定到同一个list的两个名称。 复制:

tempList = list(haystack) # shallow copy

这是Python中列表和独立变量之间行为差异的典型示例。这是因为tempList = haystack没有将haystack值复制到tempList,而是将haystack的地址分配给tempList。也就是说,现在你用两个名字来指代内存中的同一个地方。所以修改一个就会修改另一个。要复制值,可以执行tempList = list(haystack)

您不是在创建列表的副本;您只是在创建对列表的第二个引用。

如果要创建临时(浅层)副本,请明确执行以下操作:

tempList = list(haystack)

或者使用完整的列表片段:

tempList = haystack[:]

当调用对象上的.extend()时,可以在适当的位置修改可变列表,因此对该列表的所有引用都将看到更改。

另一种方法是使用串联而不是扩展来创建新列表:

haystack = [1,'Two',3]   
tempList = haystack  # points to same list
haystack = haystack + list(iterable)  # creates a *new* list object

现在haystack变量已重新绑定到新列表;tempList仍然引用旧列表。

相关问题 更多 >