Python 使用等号=
作为赋值运算符,具体格式如下:
name = value
#name为变量名 =为赋值符号 value为变量值
Python
中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的3.1 引用的概念
在Python中:
#关于变量的多次赋值(不可变类型) a = 1 a = 2
‘‘‘首先:a = 1 ,在内存中为1开辟一个空间,将1存进去,a中保存着1的内存地址
然后 a = 2,在内存中为2开辟一个空间,将2存进去,a中保存着2的内存地址
总结:在python中队同一个变量的多次赋值,并不是在同一个内存空间中刷新其中存放的值,而是将变量中存放的地址进行更新,使其指向不同的地址空间(数据)。‘‘‘
#变量引用的例子
a = 1
b = 2
c = a #将存在a中的地址赋值给c,现在c也指向了值为1的内存地址
id(a)
id(c)#使用id()查看变量中存放的内存地址 与a一致
3.2 ==和is
#==和is的区别 a = [1, 2, 3] b = a b == a #True b is a #True
c = a[:] #复制列表,在内存中另外存放这段被复制的值,将c指向它 b is a #True b == a #False
#为什么相同的值内存地址不同呢?
3.3 函数的参数和返回值的传递
在 Python
中,函数的 实参/返回值 都是是靠 引用 来传递来的
#Python中函数参数是引用传递(注意不是值传递)
def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result = 100 print("返回值 %d 在内存中的地址是 %x" % (result, id(result))) print("-" * 50) return result a = 10 print("调用函数前 内存地址是 %x" % id(a)) r = test(a) print("调用函数后 实参内存地址是 %x" % id(a)) print("调用函数后 返回值内存地址是 %x" % id(r))
int
, bool
, float
, complex
#不可变类型 x = 18 id(x) prinnt(x) #值为18 x += x #值为19 id(x) #id改变 print(x) #值为19
#可变类型 y = [1,2,3] id(y) print(y) y.append(4) id(y) #内存地址不变 print(y)#值改变
python中经经常使用的一些数值定义为小整数池,小整数池的范围是[-5,256],python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,但是小整数池外的数值在重新定义时都会再次开辟新的空间。
小整数池目的:节省内存,提高执行效率。
需要注意的是:Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被垃圾回收机制回收。
a=5 b=5 a is b #True a=1000 b=1000 a is b #False
原文:https://www.cnblogs.com/betterbetter/p/14323043.html