326-342变量的引用

1、变量的引用

在python中,变量和数据是分开存储的

数据保存在内存中的一个位置

变量中保存着数据在内存中的位置

变量中记录数据的地址,就叫做引用

使用id()函数可以查看变量中保存数据所在的内存地址

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

变量不再对之前的数据引用

变量改为对新赋值的数据引用

def test(num):
    print("在函数内部%d对应的内存地址是%d"%(num,id(num)))
a=10
#数据的地址本质上是一个数字
print("a变量保存数据的内存地址是%d"%id(a))
#2、调用test函数,本质上传递的是实参保存数据的引用,而不是实参保存的数据
test(a)
def test(num):
    print("在函数内部%d对应的内存地址是%d"%(num,id(num)))
    #1、定义一个字符变量
    result="hello"
    print("函数要返回数据的内存地址是%d"%id(result))
    #2、将字符串变量返回,返回的是数据的引用,而不是数据本身
    return  result
a=10
#数据的地址本质上是一个数字
print("a变量保存数据的内存地址是%d"%id(a))
#2、调用test函数,本质上传递的是实参保存数据的引用,而不是实参保存的数据
#注意:如果函数有返回值,但是没有定义变量接收
#程序不会报错,但是无法获得返回结果
r=test(a)
print("%s的内存地址是%d"%(r,id(r)))

2、可变和不可变数据

不可变数据:数字类型、字符串、元组

可变类型:列表、字典

#列表
a=[1,2,3]
print(id(a))

a.append(999)
print(a)
print(id(a))

a.remove(2)
print(a)
print(id(a))

a.clear()
print(a)
print(id(a))

a=[]
print(id(a))


#字典
d={"name":"xiaoming"}

d["age"]=18
print(d)
print(id(d))

d.pop("age")
print(d)
print(id(d))


d.clear()
print(d)
print(id(d))


d={}
print(d)
print(id(d))

1、可变类型的数据变化,是通过方法来是实现的

2、如果给一个可变类型的数据,赋值了一个新的数据,引用会修改,

变量不再对之前的数据引用;变量改为对新赋值的数据引用

键值对的key必须是可变类型数据;键值对的value可以是任意类型的数据

3、局部变量和全局变量

#局部变量是在函数内部定义的变量,只能在函数内部使用;
# 全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量
#在其他开发语言中,大多不推荐使用全局变量——可变范围太大,导致程序不好维护

def demo1():
    # 定义一个局部变量
    #出生:执行了下方的代码之后,才会被创建
    #死亡:函数执行完成之后
    num=10
    print("在demo1函数内部的变量是%d"%num)
def demo2():
    # print("%d"%num)
    pass
demo1()
demo2()



def demo1():
    num=10
    print("在demo1函数内部的变量是%d"%num)
def demo2():
    num = 99
    print("在demo2函数内部的变量是%d" % num)

demo1()
demo2()
#在不同的函数,可以定义相同名字的局部变量,但是彼此之间不会产生影响


num=10
def demo1():
    print("在demo1函数内部的变量是%d"%num)
def demo2():
    print("在demo2函数内部的变量是%d"%num)
demo1()
demo2()
#在函数内部直接修改全局变量的值

num=10
def demo1():
    #希望修改全局变量的值,使用global声明一下变量即可
    #golbal关键字会告诉解释器,后面的变量是一个全局变量
    #再使用赋值语句时,就不会创建局部变量
    global  num
    num=99
    print("在demo1函数内部的变量是%d"%num)


def demo2():
    print("在demo2函数内部的变量是%d"%num)
demo1()
demo2()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值