Python 可变变量与不可变变量

可变变量:也就是ID不变,值可以变,这种类型叫可变变量,如:字典

不可变变量:即值一变id也变,即重新创造一个空间存值,如int、str等

转载于:https://www.cnblogs.com/liuxiaowei/p/7163456.html

### Python 中全局变量可变修改规则 在 Python 中,全局变量的行为其所指向的数据类型的 **可变性** 密切相关。以下是关于全局变量及其可变性的详细分析: #### 1. 全局变量不可变对象 当全局变量是一个不可变对象(如 `int`、`str` 或 `tuple`),在其作用域外对其进行修改时需要注意以下几点: - 如果尝试通过赋值操作来更改该全局变量,则会在函数内部创建一个新的局部变量,而不会影响原始的全局变量[^2]。 - 若要真正修改全局变量的值,需显式使用 `global` 关键字。 示例代码如下: ```python x = 10 # 定义一个全局变量 def modify_global(): global x # 使用 global 声明 x += 5 # 此处会对全局变量 x 进行修改 modify_global() print(x) # 输出结果为 15 ``` 如果不加 `global` 关键字,在函数内部执行类似的操作将会引发未定义行为或错误。 #### 2. 全局变量可变对象 对于可变对象(如 `list` `dict`),即使不使用 `global` 关键字也可以直接对其内容进行修改。这是因为这些对象存储的是引用地址而非实际数据副本,因此任何对该引用地址上的数据结构所做的变更都会反映到全局范围内的同一对象上。 下面的例子展示了如何无需借助 `global` 来更新列表中的元素: ```python my_list = [1, 2, 3] def append_to_list(value): my_list.append(value) append_to_list(4) print(my_list) # 结果将是 [1, 2, 3, 4] ``` 然而,如果试图重新绑定这个名称给另一个新对象(即重置整个变量而不是仅仅调整它的状态),则仍然需要运用 `global` 才能生效。 #### 3. 局部变量的影响及垃圾回收机制 一旦某个名字被认定为局部范围内有效的新实体之后,它就不会再关联至同名却位于更高级别的命名空间里的项目上了——即便两者之前确实存在某种联系也是如此。此外,由于 Python 的自动内存管理特性,包括引用计数周期检测在内的多种策略共同协作以释放不再使用的资源[^4]。 综上所述,理解并掌握好哪些类型属于可变还是不可变得范畴至关重要,这直接影响着我们在编程实践中能否有效地控制程序逻辑走向以及优化性能表现等方面的工作效率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值