我将'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‘。
救命啊,please.Thanks。
发布于 2013-06-08 08:35:44
您并不是在创建列表的副本;您只是创建了对它的第二个引用。
如果要创建临时(浅层)副本,请明确执行以下操作:
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仍然引用旧列表。
发布于 2013-06-08 08:35:28
tempList和haystack只是绑定到同一个list的两个名称。复制一份:
tempList = list(haystack) # shallow copy发布于 2013-06-08 08:35:41
这是一个典型的例子,说明了Python中列表和独立变量的行为差异。这是因为tempList = haystack不会将堆积如山的值复制到tempList,而是将haystack的地址分配给tempList的地址。也就是说,现在您通过两个名称引用内存中的同一位置。所以修改一个也会修改另一个。要复制值,可以执行tempList = list(haystack)。
https://stackoverflow.com/questions/16994799
复制相似问题