总结下篇python定义函数的变量问题:
1、可变类型:值可以修改,内存地址引用时可以修改。
2、不可变类型:值不能修改,引用可以修改(=赋值时)。
def test1(x,y):
x.replace("h","H")
y.append(4)
print('x的内存地址为%s'%id(x))
print("y的内存地址为%s"%id(y))
a = "hello"
b = [1, 2, 3]
print("a的内存地址为%s:"%id(a))
print("b的内存地址为%s:"%id(b))
test1(a,b)
执行结果可看出内存地址:
a的内存地址为317178704b的内存地址为433189576
x的内存地址为317178704
y的内存地址为433189576
a = x,b=y
这里a为字符串,为不可变类型,所以执行replace操作内存地址没有变化。
那么为什么b列表地址也没变呢?
原因是在执行代码时,y只有append函数,并没有将y.append赋值于y,我们将:
y = y.append([4])
再看下执行后内存变化:
a的内存地址为315147648
b的内存地址为432009928
x的内存地址为315147648
y的内存地址为1939926136