首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:函数中数组/列表的本地副本

Python:函数中数组/列表的本地副本
EN

Stack Overflow用户
提问于 2017-01-01 01:29:31
回答 2查看 1.1K关注 0票数 0

在函数"change(par)",中,"par“是否已经生成了本地副本?它适用于列表,为什么它不适用于数组?

代码语言:javascript
运行
复制
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()

输出:

代码语言:javascript
运行
复制
L before: [0, 0, 0]
L after: [0, 0, 0]

A before: [[ 0.  0.  0.]]
A after: [[ 123.    0.    0.]]

更新

感谢您指出"par“是一个浅拷贝,它不适用于数组。

那么,在数组结构的情况下,“浅拷贝”是如何工作的呢?对于list,“浅拷贝”复制值,但是当它变成数组时,“浅拷贝”只是复制引用而不是值?

"“如何区分何时复制值和何时仅复制引用?

EN

回答 2

Stack Overflow用户

发布于 2017-01-01 01:36:55

当您以您的方式“复制”一个numpy数组时,您并不是真正地复制它。您可以从中选择一系列元素(在您的例子中,所有元素都是这样)。该范围与数组的实际值相链接。把它想象成一个“窗口”,你可以看到一个“有限的”范围,但是你实际上没有它的副本,你通过那个“窗口”来做你的操作。

在python列表的情况下,您确实克隆了它。

如果要克隆numpy数组,可以使用copy方法:(矮胖的医生)

票数 0
EN

Stack Overflow用户

发布于 2017-01-01 01:45:20

正如注释所提到的,您正在通过语法[:]进行浅拷贝,它只适用于一维列表。

您可以利用deepcopy函数从复制模块克隆多维列表/数组。

代码语言:javascript
运行
复制
import copy
def change(par):
    copy = copy.deepcopy(par)
    copy[0] = 123
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41412773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档