| 原始值 | 引用值 | |
| 概念 | 原始值指的是 原始类型 的值,也叫 基本类型 | 引用值指的是 引用类型(类) 的值 | 
| 数据类型 | Number、Stirng、Boolean、Null、Underfined | Object、Function、Array、Date、RegExp | 
| 存储 | 栈(stack),占内存空间固定,使用后被销毁 | 
			 堆(heap),占内存空间不固定,使用后不一定被销毁,只有一个对象没有任何引用时, 系统的垃圾回收机制才会回收销毁  | 
		
| 赋值方式 | 
			 1.值的拷贝,创建一个新对象 2.保存与复制的是值本身 3.两份数据在内存中是完全独立的  | 
			
			 1.引用的拷贝,创建一个新引用 2.保存与复制的是指向对象的一个指针 3.变量中的存储的地址赋值一份单独存储, 两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。 4.使用 new() 方法构造出的对象是引用型  | 
		
| 值是否可变 | 不可变 | 可变 | 
| 作用域 | 函数作用域,在函数内部修改时生效,函数销毁时失效 | 函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。 | 
| 比较方式 | 
			 值 的比较  | 
			引用的比较 | 
|  
			 == → 只比较值 === → 不仅比较值,还比较数据类型 
  | 
			||
| 检测类型 | typeof 运算符 | instanceof 运算符 | 
# 使用object(字典)  
def func(o):  
    o['message'] = 'new Value'
o = {"message": 'old value'}  
func(o)  
print(o)  
# 结果:{'message': 'new Value'},,结果变化了  
# 使用Array(数组)  
def func(o):  
    o[2] = 'new value'  
    # o['message'] = 'new Value'  
# o = {"message": 'old value'}  
o = ['a', 'b', 'c']  
func(o)  
print(o)  
# 结果:['a', 'b', 'new value'],同样变化了  
# 使用普通的值类型  
def func(o):  
    o = 'new value'  
    print(o)  
o = 'old value'  
func(o)  
print(o)  
# 结果:new value  
old value  
从上方代码可以看出值类型与引用类型的区别
参考:https://www.cnblogs.com/lingXie/p/11493620.html
评论列表
已有0条评论