【问题标题】:Python modifies the original variable after the function call [duplicate]Python在函数调用后修改原始变量[重复]
【发布时间】:2020-01-22 14:49:52
【问题描述】:

我想知道是否有人可以解释为什么 Python 在将原始变量分配给另一个变量然后将第二个变量传递给函数调用后修改它: 考虑以下示例代码: 假设 A 是原始变量:

A=np.array(([1,20,30,40,10,5,60]))
B=A

B.sort()
print(A)
print(B)

两者的输出是一样的:

[ 1  5 10 20 30 40 60] 
[ 1  5 10 20 30 40 60]

A 是原始变量,我将它分配给 B,然后我对 B 进行排序,那么为什么 A 和 B 都被排序?如果我只想对 B 进行排序并将其与 A 进行比较怎么办

【问题讨论】:

标签: python list sorting variables


【解决方案1】:

如果你说 B=A 其中 A 是一个数组,Python 只会创建一个指向 A 的新指针 你可以这样做

A = B[:]

复制数组

【讨论】:

  • “其中 A 是一个数组”无关紧要。对象的类型不影响赋值的语义。所有对象的行为方式完全相同。此外,B[:] 不会创建 numpy 数组的副本。它创建了一个 view,因此对视图进行排序仍然会对原始视图进行排序。这与 OP 代码的行为方式完全相同。
  • ups,你说得对,这仅适用于普通数组。我从来没有用过 numpy。但是类型无关紧要并不是真的。整数、字符串、浮点数……被复制。好吧,它不仅仅是获得新“指针”或其他任何东西的数组,它的所有对象
  • 我应该编辑答案还是因为答案已链接而直接删除?
猜你喜欢
  • 2017-10-24
  • 1970-01-01
  • 2015-09-04
  • 2015-03-15
  • 2014-03-25
  • 1970-01-01
  • 2016-01-13
  • 2013-07-01
  • 2013-11-25
相关资源
最近更新 更多