关于可更改与不可更改类型, 以及其它语言的值类型与引用类型的介绍,一直一来感觉都不太严谨, 说法是否正确有待验证。
简单的说就是,不可更改类型传到函数里重新赋值后,两次输出值不一样,而可更改类型传到函数里对对象的"属性" 重新赋值后输出值一样。
这里照搬一下例子:
# 可写函数说明
def changeme( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4])
print("函数内取值: ", mylist)
return
# 调用changeme函数
mylist =[10,20,30]
changeme( mylist )
print("函数外取值: ", mylist)
请注意:上面特意用了引号标准的部分,对可变类型或者引用的操作修改的是传过来的对象的属性。
可以这么理解(例子有点随意):我在画画,小明来了说他也要画,我让他和我一起画,他如果和我在同一个画板上画,那么我们两的画就会同时改变。 而如果他说不,我要另外用一块画板,然后重新拿了块画板画起来了,那么我们两的画自然就不一样了。
同理可更改类型 的属性进行操作,这只是对引用的内存块里面的值进行操作,引用并没变,自然所有引用它的对象的值都变了。而对不可更改的对象进行操作,因为它引用的内存块只是对应一个固定的值,不能进行修改,要重新复制实际上就是更新引用。
如果我们运行下面的例子,对可更改类型的引用进行修改,结果就不一样了。
# 可写函数说明
def changeme( mylist ):
"修改传入的列表"
mylist =[1,2,3,4]
print("函数内取值: ", mylist)
return
# 调用changeme函数
mylist =[10,20,30]
changeme( mylist )
print("函数外取值: ", mylist)
结果
函数内取值: [1,2,3,4]
函数外取值: [10,20,30]