Python 从类内方法更改全局变量

Python 从类内方法更改全局变量,python,class,methods,global,Python,Class,Methods,Global,当我尝试执行下面的代码时,第一个列表会被修改,而第二个列表不会发生任何更改。有没有办法用一个全新的列表替换外部列表,或者调用列表方法是唯一允许我从类内方法执行的操作?我尝试在赋值操作之前添加全局关键字,但它会产生语法错误 first_list = [] second_list = [] class MyClass: def change_values(self): first_list.append('cat') second_list = ['ca

当我尝试执行下面的代码时,第一个列表会被修改,而第二个列表不会发生任何更改。有没有办法用一个全新的列表替换外部列表,或者调用列表方法是唯一允许我从类内方法执行的操作?我尝试在赋值操作之前添加全局关键字,但它会产生语法错误

first_list = []
second_list = []


class MyClass:

    def change_values(self):
        first_list.append('cat')
        second_list = ['cat']

 test = MyClass()
 test.change_values()
 print(first_list)
 print(second_list)

第一:使用状态可变的全局变量几乎从来都不是一个好主意。您应该像使用常量或单例一样使用模块级变量。如果要更改变量的值,应将其作为参数传递给函数,然后从函数返回新值

他说你的问题的答案是:

first_list = []
second_list = []


class MyClass:
    def change_values(self):
        first_list.append('cat')
        second_list[:] = ['cat']

test = MyClass()
test.change_values()
print(first_list)
print(second_list)
或:


在函数内部使用global关键字

问题在于,当您像在第二个_列表中那样使用赋值运算符时,解释器会假定您正在尝试向本地函数的名称空间添加属性,这是因为在解释器的查找顺序中,本地函数的名称空间位于全局名称空间之前。
first_list = []
second_list = []


class MyClass:
    def change_values(self):
        first_list.append('cat')
        global second_list
        second_list = ['cat']

test = MyClass()
test.change_values()
print(first_list)
print(second_list)