如何在Python 2.7中使用临时变量 - 内存

时间:2013-06-08 00:33:34

标签: python variables memory

我将'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' 请帮忙。谢谢。

3 个答案:

答案 0 :(得分:5)

您没有创建列表的副本;你只需要创建第二个引用。

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

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仍然引用旧列表。

答案 1 :(得分:3)

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

tempList = list(haystack) # shallow copy

答案 2 :(得分:1)

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