Python 列表复制使用写时复制吗?
假设我复制了一个已有的列表:
existing_list = [ 1, 2, 3 ];
copied_list = existing_list[:]
...
copied_list[2] = 'a' // COW happens here
[一些修改]
我听说当复制的列表或原来的列表被修改时,Python会使用“写时复制”(copy-on-write)技术。这是真的吗?
我觉得这听起来有点复杂,感觉需要到处加锁(想想多线程的情况)。
为了更清楚:我并不是在寻找“写时复制”的实现。我只是想了解Python的标准行为是什么。
4 个回答
2
这不是“写时复制”,而是“现有的引用会一直存在,直到被替换”。没什么好看的,继续往前走吧。
2
不行。如果你想要一个支持写时复制的列表实现,可以试试blist。
9
没有所谓的“写时复制”。当你运行 copied_list = existing_list[:]
这行代码时,实际上是立刻创建了一个新的列表,并把原来的列表内容复制到这个新列表里。你可以在这里查看具体的代码来源: http://hg.python.org/cpython/file/2.7/Objects/listobject.c#l467