2013-11-27 135 views
1

Python是否有类似Java的System.arraycopy?我不想只复制参考(浅拷贝),也不想分片(深拷贝w /新参考)。我想保留目标的引用(因为我有多个变量指向同一个列表)并将单个单元格从源复制到目标。完全像Java的arraycopy。到目前为止,我可以找到在Python中执行此操作的唯一方法是编写我自己的代码。在Java中,使用System.arraycopy比使用自己的方法更高效,不确定在Python中是否如此。Python是否有类似于Java的System.arraycopy?

回答

8

如果我按照所描述的行为,切片分配是Python的方式来做到这一点:

foo = range(10) 
bar = foo 
baz = range(10, 0, -1) 
foo[0:4] = baz[0:4] 

>>> foo 
[10, 9, 8, 7, 4, 5, 6, 7, 8, 9] 
>>> bar 
[10, 9, 8, 7, 4, 5, 6, 7, 8, 9] 

如果源包含对象的引用,将分配到同一个对象的引用到目标 - 如果你想深复制源数据,我认为你必须做这样的事情:

foo[0:4] = [copy.deepcopy(x) for x in baz[0:4]] 
+0

正是我一直在寻找,谢谢! – JeffHeaton

1

更新:彼得DeGlopper的方法是更好的方式。去那个。

对不起,这是最好的你:

def arrayCopy(src, srcPos, dest, destPos, length): 
    for i in range(length): 
     dest[i + destPos] = src[i + srcPos] 
相关问题