Python之旅——变量赋值

变量赋值

python中,变量是对象的引用。变量赋值,即将变量指向值对象,对值对象的引用。

值对象的分类:

  • 不可变对象
  • 可变对象

值对象为不可变对象

不可变对象,通俗的讲,就是不可以改变对象的内容。比如:数字,字符串,元祖tuple

变量指向的值对象不可变,但变量的指向可变,即可以改为指向新的值对象。

1. 值对象为数字

a = 10
b = a
print("a addr: 0x%x val: %d" % (id(a), a))
print("b addr: 0x%x val: %d" % (id(b), b))

print("-"*30)

a = 100
print("a addr: 0x%x val: %d" % (id(a), a))
print("b addr: 0x%x val: %d" % (id(b), b)

代码输出:

a addr: 0x7ffb45d47d60 val: 10
b addr: 0x7ffb45d47d60 val: 10
------------------------------
a addr: 0x7ffb45d488a0 val: 100
b addr: 0x7ffb45d47d60 val: 10

2. 值对象为字符串

a = "hello"
b = a
print("a addr: 0x%x val: %s" % (id(a), a))
print("b addr: 0x%x val: %s" % (id(b), b))

print("-"*30)

a += " python!" 
print("a addr: 0x%x val: %s" % (id(a), a))
print("b addr: 0x%x val: %s" % (id(b), b)

代码输出:

a addr: 0x1dd1cdb71b0 val: hello
b addr: 0x1dd1cdb71b0 val: hello
------------------------------
a addr: 0x1dd1cfb62b0 val: hello python!
b addr: 0x1dd1cdb71b0 val: hello

3. 值对象为tuple

a = (1, 2)
print("a addr: 0x%x val: %s" % (id(a), a))

print("-"*35)

b =  (1, 2)
print("b addr: 0x%x val: %s" % (id(b), b))

print("-"*35)

a =  (3, 4)
print("a addr: 0x%x val: %s" % (id(a), a))

代码输出:

a addr: 0x2af983d7988 val: (1, 2)
-----------------------------------
b addr: 0x2af983d7988 val: (1, 2)
-----------------------------------
a addr: 0x2af985e7948 val: (3, 4)

值对象为可变对象

值对象内容可变,比如:列表list,字典dict和集合set

修改值对象的内容,所有引用当前值对象的变量,都可见修改。

1. 列表

a = [1, 2, 3]
b = [1, 2, 3]
c = a
print("addr a=0x%x b=0x%x c=0x%x" % (id(a), id(b), id(c)))

print("-"*30)

c[0] = 4
print(f"a={a}")
print(f"b={b}")
print(f"c={c}")

代码输出:

addr a=0x2b2780d5208 b=0x2b2780d5408 c=0x2b2780d5208
------------------------------
a=[4, 2, 3]
b=[1, 2, 3]
c=[4, 2, 3]

2. 字典

a = {"m": 0, "n": 1}
b = {"m": 0, "n": 1}
c = a
print("addr a=0x%x b=0x%x c=0x%x" % (id(a), id(b), id(c)))

print("-"*30)

c["m"] = 4
print(f"a={a}")
print(f"b={b}")
print(f"c={c}")

代码输出:

addr a=0x20412912b88 b=0x20412912bd8 c=0x20412912b88
------------------------------
a={'m': 4, 'n': 1}
b={'m': 0, 'n': 1}
c={'m': 4, 'n': 1}

3. 集合

a = {1, 2, 3}
b = {1, 2, 3}
c = a
print("addr a=0x%x b=0x%x c=0x%x" % (id(a), id(b), id(c)))

print("-"*30)

c.remove(2)

print(f"a={a}")
print(f"b={b}")
print(f"c={c}")

代码输出:

addr a=0x1de10219908 b=0x1de1041eba8 c=0x1de10219908
------------------------------
a={1, 3}
b={1, 2, 3}
c={1, 3}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值