python的变量都可以看成是内存中某个对象的引用。(变量指向该内存地址存储的值)
1.python中的可更改对象和不可更改对象
python中的对象可以分为可更改(mutable)对象与不可更改(immutable)对象
- strings, tuples, 和numbers是不可更改的对象
- list,dict等则是可以修改的对象。 如果某个变量指向不可更改的对象,则重新赋值时。原对象被抛弃,变量会指向一个新对象。 若指向的是可更改的对象,则重新赋值时,会也会重新赋值内存中对象的值。
如图:nfoo是numbers为不可更改对象,lstFoo是list为可更改对象
当重新赋值时,发生的改变如下图
注意若lstFoo整个list变量重新赋值,则还是新开辟一个内存对象,lstFoo再指向新的内存对象 ### 2.python的函数是引用调用,还是传值调用?
在函数参数传值时,变量也是内存对象的引用。 当对象为可更改对象时,是引用调用,函数内参数的改变会影响到原始对象。 当对象为不可更改对象时,就只是相当于传值调用。