首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么将一个变量的值赋值给另一个变量保存在python中的内存中?

为什么将一个变量的值赋值给另一个变量保存在python中的内存中?
EN

Stack Overflow用户
提问于 2019-01-03 16:04:53
回答 1查看 174关注 0票数 1

我对python很陌生,以前使用过Matlab,对于python中的变量有一些混淆。

我正在尝试用python重写Matlab代码,这里是混乱的地方。让我们说,我有以下情况:

代码语言:javascript
复制
>>> A = np.array([[1,2,3],[4,5,6]])
>>> out = np.array([[True, False, True],[False, True, False]])
>>> 
>>> B = A
>>> 
>>> B[out] = A[out]+1
>>> 
>>> B
array([[2, 2, 4],
       [4, 6, 6]])
>>> A    
array([[2, 2, 4],
       [4, 6, 6]])

在Matlab中,A不随同一段代码而改变,但在python中却是如此。任何人都可以解释为什么和什么是最好的方法来避免变化的A?

代码-图像:为什么分配A到B在流程中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-03 16:07:01

通过做

代码语言:javascript
复制
B = A

您正在创建对同一个对象A的另一个引用,因此A产生的所有更改都将自动反映在B中。在本例中复制列表/数组的适当(少数)方法

代码语言:javascript
复制
B = A[::]

代码语言:javascript
复制
B = A.copy()

通过这种方式,您可以将元素复制到列表变量中,而无需创建指向原始变量A的指针,从而使它们在内存地址项中解耦。

正如乔恩·克莱门茨指出的,

[::]的意思是开始,以1的步长结束,这意味着[0:len(obj):1],而[:]意味着[:len(obj)]obj是您的对象。

正如下面@Patrick所指出的,如果您的A是一个numpy矩阵,您也可以这样做

代码语言:javascript
复制
 B = np.copy(A)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54025870

复制
相关文章

相似问题

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