【问题标题】:list and array is global by default in python3.6? [duplicate]列表和数组在python3.6中默认是全局的吗? [复制]
【发布时间】:2018-04-16 07:07:14
【问题描述】:

下面只是一个简单的代码:

import numpy as np
x=np.array([1,2])
y=[1,2]
L=1

def set_L(x,y,L):
    x[0]+=1
    y[0]+=1
    L+=1
    print(id(x))
    print(id(y))
    print(id(L))

我发现函数set_L()中数组x和list y是一样的,这是否意味着默认list和array是全局变量?但是变量 L 在函数 set_L() 中不是全局变量。我很困惑为什么 Python 是这样设计的?

【问题讨论】:

  • 你可以在副本中找到答案
  • 区别之一是可变性。
  • @hpaulj 虽然可变性会影响结果,但它与范围和赋值语义无关
  • 这个问题将两件事混为一谈——变量范围,以及+= 如何修改对象。数组和列表是可变的,可以在不更改 id 的情况下更改,而标量则不是。 id(L) 是其值的 idid(1)id(2)(在 Cython 中,小的正整数具有唯一的 id)。

标签: python arrays list numpy global-variables


【解决方案1】:

x[0]+=1 和 y[0]+=1 只是修改现有对象,而 L+=1 是一个赋值并创建一个新的本地引用。见https://stackoverflow.com/a/11867500/7662112

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-12
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2015-06-21
    相关资源
    最近更新 更多