python中的复制列表:深度与浅层复制:在python中找到我

  • 本文关键字:复制 python 深度 列表 python
  • 更新时间 :
  • 英文 :


所以这就是我尝试做的。

vectorized = [0] * length
for i,key in enumerate(foo_dict.keys()):
    vector = vectorized
    vector[i] = 1
    print vector
    vector = vectorized
print vectorized

例如,我希望长度是4。所以我创造一个4维矢量:

  vectorized=[0,0,0,0]

现在,取决于dictionary的索引(在这种情况下也是长度为4)创建一个值为1的矢量,而其余的为零

so vector = [1, 0,0,0]  , [0,1,0,0] and so on..

现在取而代之的是:

 vector = [1,0,0,0],[1,1,0,0] .. and finally [1,1,1,1]

即使矢量化现在也是

   [1,1,1,1]

我做错了什么。以及我如何实现我想要实现的目标。基本上,我正在尝试创建单位向量。感谢

这一行(实际上是这些行):

vector = vectorized

复制列表引用。您需要对序列内容进行浅层复制。

vector = vectorized[:]

您要创建一个列表,然后给它几个不同的名称。请记住,a=b不会创建新对象。这只是意味着a和b都是同一事物的名称。

试试这个:

for ...:
    vector = [0] * length
    ...

vector = vectorized

没有复制CCD_ 1。从那时起,每当您更改vector时,也会更改"矢量化"。

您可以将第一行更改为:

vector = vectorized[:]

import copy
vector = copy.copy(vectorized)

如果你想复制。

在Python中,当您将列表分配给新列表时,新列表只是一个指针,而不是一个全新的指针。

因此,当你试图修改"vector"的值时,你实际上是在改变"vectorized"的值。在你的情况下,vector[i] = 1vectorized[i] = 1

您的问题是,当您编写vector = vectorized时,它不是在创建数组的副本,而是在两者之间创建绑定。

Python中的赋值语句不复制对象,而是在目标和对象之间创建绑定。

http://docs.python.org/library/copy.html

这应该有助于你解决问题。

下面是python REPL中的一个小片段,向您展示我的意思。

>>> vectorized = [0] * 4  
>>> print vectorized  
[0, 0, 0, 0]  
>>> vector = vectorized  
>>> vector[1] = 1  
>>> print vectorized  
[0, 1, 0, 0]

编辑:天哪,你们快!

最新更新