Py学习  »  Python

Python中的易变性及其原因?

itsolidude • 5 年前 • 1486 次点击  

所以我试着让易变性更好的进入我的大脑,我看到很多有经验的人有时挣扎。

我在这里做了一个小测试代码:

x = 1
def test():
    x = 2
test()
print(x) #1


x = 1
def test():
    global x
    x = 2
test()
print(x) #2


x = [1]
def test():
    x = [2]
test()
print(x) #[1]


x = [1]
def test():
    global x
    x = [2]
test()
print(x) # [2]


x = [1]
def test():
    x[0] = 2
test()
print(x) #[2]

我对一切都很清楚,除了最后一个和第二个最后一个有什么区别。具体的规则是什么。我注意到可以更改对象的值,但不能更改对象类型本身,或者我理解错了吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55228
 
1486 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Shubham Sharma
Reply   •   1 楼
Shubham Sharma    5 年前
# case 1
x = 1
def test():
    x = 2
test()
print(x) #1

# case 2
x = 1
def test():
    global x
    x = 2
test()
print(x) #2

在案例1中,变量 x 里面 test 是本地作用域,因此更改其值不会更改外部声明的x的值 因此不会变异 测试 .

在案例2中,变量 测试 测试 测试 .


# case 3
x = [1]
def test():
    global x
    x = [2]
test()
print(x) # [2]

# case 4
x = [1]
def test():
    x[0] = 2
test()
print(x) #[2]

里面 测试 测试 ,但当您将新列表分配给 ,将创建对此列表的新引用 [2] 而改变这个新列表并不会改变外部声明的列表中的值 测试

在案例4中,列表 测试 方法保存对在函数外部声明的相同列表实例的引用 测试 ,当你打电话 x[0] 2 index 0