【发布时间】:2017-01-01 01:29:31
【问题描述】:
在函数“change(par)”中,“par[:]”是否已经制作了本地副本?它适用于列表,为什么它不适用于数组?
import numpy
def change(par):
copy = par[:]
copy[0] = 123
def main():
L = [0, 0, 0]
print '\nL before: ' + str(L)
change(L)
print 'L after: ' + str(L)
A = numpy.zeros((1, 3))
print '\nA before: ' + str(A)
change(A[0])
print 'A after: ' + str(A)
if __name__ == '__main__':
main()
输出:
L before: [0, 0, 0]
L after: [0, 0, 0]
A before: [[ 0. 0. 0.]]
A after: [[ 123. 0. 0.]]
更新
感谢您指出“par[:]”是浅拷贝,不适用于数组。
那么“浅拷贝”在数组结构的情况下如何工作?在列表的情况下,“浅拷贝”复制值,但是当它变成数组时,“浅拷贝”只是复制引用而不是值?
“[:]”如何区分何时复制值和何时仅复制引用?
【问题讨论】:
-
你在做浅拷贝
标签: python arrays list deep-copy shallow-copy