Python有没有类似Java的System.arraycopy?

时间:2013-11-27 21:27:15

标签: java python

Python有没有类似Java的System.arraycopy?我不想只是复制引用(浅拷贝),也不想切片(深拷贝w / new ref)。我想保留目标的引用(因为我有多个变量指向同一个列表)并将单个单元格从源复制到目标。完全像Java的arraycopy。到目前为止,我在Python中找到的唯一方法就是编写自己的。在Java中,使用System.arraycopy比滚动自己更高效,不确定Python是否就是这种情况。

3 个答案:

答案 0 :(得分:8)

如果我遵循所描述的行为,切片分配是Pythonic的方法:

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]]

答案 1 :(得分:1)

更新: Peter DeGlopper的方法更好。去那个。

对不起,这是你得到的最好的:

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

答案 2 :(得分:0)

def array_copy(src: bytes, src_pos: int, dest: bytes, dest_pos: int, length: int) -> bytes:
return dest[:dest_pos]+src[src_pos:length]+dest[dest_pos+length:]