Python-变量的引用与可变

描述

引用

概念

  • **变量 数据 **都是保存在内存中的
  • 在 Python 中,函数 的参数传递和返回值 都是靠 引用 传递的
  • **变量 **和 数据是分开存储的
  • 数据 保存在内存中的一个位置
  • 变量 中记录数据的地址,就叫 引用
  • 使用** id() ** 函数可以查看变量中保存数据所在的 内存地址

注: 如果变量已经被定义,当给一个变更 重新赋值的时候,本质上是 修改了数据的引用

**示例

**

a=1
print(id(a))
print(id(1))


b=a
print(id(b))


a=2
print(id(a))

输出结果:从这里面可以看出 前三个的内存地址是一样的

函数

函数

**函数的参数传递与返回值的引用

**

def test(num):
  print("传递的值是:%d,内存地址是:%d" %(num,id(num)))
  result="test"
  print("返回的值是:%s,内存地址是:%d" %(result,id(result)))
  return result




a=1
print("需要传递的参数的值是:%d,内存地址是:%d"%(a,id(a)))


ss=test(a)
print("调用函数获取的返回值是:%s,内存地址是:%d" %(ss,id(ss)))

**输出结果

**

函数

结论:从结果中可得知,在调用函数时,传入的变量,实际上是将变量的引用内存地址 传递进去了。函数在返回时,同样是将变量对应的 引用 返回出来了

可变和不可变类型

  • 不可变类型,即内存中的数据不允许被修改
    • 数字类型:int 、bool、float、complex、long
    • 字符串 str
    • 元组 tuple
  • 可变类型,即内存中的数据可以被修改
    • 列表 list
    • 字典 dict
    • 集合 set

示例

# 不可变数据类型
a=1
print("内存地址是:%d" %id(a))
a=2
print("内存地址是:%d" %id(a))




#可变数据类型
b=[1,2,3]
print("内存地址是:%d" %id(b))
b.append(4)
print("值是:%s,内存地址是:%d" %(b,id(b)))


#如果重新用 = 赋值,则会新建一块内存地址
b=[]
print("新内存地址是:%d" %id(b))

输出结果

函数

结论:

  • 可变类型的数据变化,是通过方法来 实现的
  • 如果给一个可变类型的变量,赋值了一个新的数据,引用的地址则会不同

**哈希(hash)

**

  • Python 中内置有一个名字叫做 hash() 的函数
    • 接收一个 不可变类型 的数据作为参数
    • 返回 结果是一个整数
  • 哈希是一种算法,其作用就是提取数据的特征码(类似指纹)
    • 相同的内容 得到 相同的结果
    • 不同的内容 得到 不同的结果
  • 在 Python 中,设置字典的键值对时,会首先对 key 进行 hash ,用来决定如何在内存中保存字典的数据,以方便 后续 对字典的操作:增、删、改、查
    • 键值对的 key 必须是不可变类型的数据
    • 键值对的 value 可以是任意类型的数据
# 对同一个不可变的数据类型,hash 两次,得到的结果是一样的
print(hash("123"))
print(hash("123"))

输出结果

函数

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分