# -*- coding: utf-8 -*-
# 测试拷贝
class TestCopy(object):
# 测试函数1
def testFunc1(self, xList, y):
y = 1
xList.append(5)
print("② testFunc1打印地址:", id(xList))
print("② testFunc1打印地址:", id(y))
# 主函数
if __name__ == "__main__":
print("▼ 测试传值和传引用操作 ▼")
testCell = TestCopy()
xList = [1, 2, 3, 4]
y = 0
print("① 执行函数前:")
print("① 打印xList值:", xList)
print("① 打印y值:", y)
print("① 打印xList地址:", id(xList))
print("① 打印y地址:", id(y))
testCell.testFunc1(xList, y)
print("③ 执行函数后:")
print("③ 打印xList值:", xList)
print("③ 打印y值:", y)
print("③ 打印xList地址:", id(xList))
print("③ 打印y地址:", id(y))
控制台输出:
```bash
▼ 测试传值和传引用操作 ▼
① 执行函数前:
① 打印xList值: [1, 2, 3, 4]
① 打印y值: 0
① 打印xList地址: 1771697231688
① 打印y地址: 140712265543904
② testFunc1打印地址: 1771697231688
② testFunc1打印地址: 140712265543936
③ 执行函数后:
③ 打印xList值: [1, 2, 3, 4, 5]
③ 打印y值: 0
③ 打印xList地址: 1771697231688
③ 打印y地址: 140712265543904
说明:id(y)可以获取y的地址
1、传值方式

说明常规类型的变量y是使用传值方式,调用函数y的值和调用函数后y的值没有发生改变。y只是将值传给testFunc1函数,函数内的y其实是另一个地址的变量,所以testFunc1函数内部对y的修改不会影响main函数中y变量的值。
2、传引用方式


说明列表类型的变量xList是使用传引用方式,xList将地址传给testFunc1函数,testFunc1函数的xList其实和main函数的xList是同一个变量,所以testFunc1函数内部对xList的修改会影响main函数中xList变量的值。
该文通过一个Python代码示例展示了传值和传引用的区别。在函数调用中,基本类型变量y按值传递,函数内部的修改不会影响外部变量;而列表xList按引用传递,函数内部的修改会直接影响到原始列表。这与Python的对象和内存管理机制有关。
159

被折叠的 条评论
为什么被折叠?



