- 论坛徽章:
- 0
|
回复 2# 路人贾
我暂时的理解如下,还找不到确凿的资料说明,只是自己试验的结果,不知道是否正确:
def ChangeInt(a):
a=10
b=2
ChangeInt(b)
print b # ->2
翻译为非函数的样子:
b=2
a=b #a的内存地址跟b是一样的,说明这里是内存地址拷贝,因此赋值可以理解为指针指向
a=10 #将a指向了新创建的10对象,a的内存地址发生了改变.
print b
def ChangeList(a):
a[0]=10
b=[2]
ChangeList(b)
print b # ->[10]
翻译为非函数:
b=[2]
a=b #a的内存地址跟b是一样的,说明这里是内存地址拷贝,因此赋值可以理解为指针指向
a[0]=10 #将a指向的列表的第一个元素值指向内存新创建的10对象,a的内存地址没有改变,仍然跟b的内存地址一致.
print b
def ChangeList(a):
a=[10]
b=[2]
ChangeList(b)
print b # ->[2]
翻译为非函数:
b=[2]
a=b #a的内存地址跟b是一样的,说明这里是内存地址拷贝,因此赋值可以理解为指针指向
a=[10] #重新创建了一个新的列表,a指向这个新列表,a的内存地址发生了改变.
print b
总结以上3个例子,可以理解为:
1.python中的赋值"="语句,可以理解为指针的指向.
2.由于指针指向问题,故才衍生出"作用域"的概念,而不是因为有作用域的"人为限制"造成的以上结果,是吧?!
3.注意区分可变对象与不可变对象的区别.list,dict,int,char,tuple...
4.以此也推出了值传递与引用传递的概念,可以统一理解为python中都是引用传递.
|
|