社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python中的易变性及其原因?

itsolidude • 5 年前 • 1478 次点击  

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

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

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
 
1478 次点击  
文章 [ 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