数据结构与算法学习笔记1-变量、地址与赋值

python中可变对象和不可变对象

不可变对象: 对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存。
数值类型int 、float、 字符串str 、元祖tuple、boole 都是不可变对象。
可变对象: 对象指向的内存中的值会改变,当更改这个变量的时候,还是指向原来内存地址中的值,并且在原来的内存地址值进行原地修改,并没有开辟新的内存。
基本只有列表list、集合set、字典dict是可变对象。

python中的赋值

python赋值的实质:把要赋值对象的“地址”赋给变量名,而不是直接把复制内容“直接装进”变量名中(变量和列表都是一样的)。

python赋值的流程:1.先为等式右边(待赋值对象)开辟内存空间(即使右边是相同的内容,两次的地址也不一样) 2.把内存的地址(列表则是首地址)赋给变量名。
注意:这里等式右边必须是实实在在的“常量”(直接打出的常数,字符串,列表等),而不是两个变量(等号左右都是变量称为浅复制,不是赋值)

python中“=” 赋值的本质: 把右侧的地址(或首地址)赋给左侧。如果右侧没有地址(常量或者直接打出的列表等),则为其开辟一个新的内存空间,再把地址赋给左侧。

python的“浅复制”:用“=”给两个“同类对象”赋值就是“浅复制”,浅复制只是把右边变量的地址给了左边变量,二者指向的仍然是同一处内存空间。即实际上完全是一个东西(不独立),在不改变地址的情况下,一个变另外一个也会跟着变。

变量和列表的浅复制
对于变量来说,是不是浅复制完全没有太大区别,因为不存在改变变量值而不改变其地址的情况(变量值变则地址必然变,即使是a+=1这种)。
对于列表则完全不同,append(item)等方法可以在不改变首地址的情况下更改列表内容(在不变的首地址后改变或增加新的内存空间),这时新老列表会一起改变,但不到复制的目的,因此称为浅复制。

"""对变量的赋值"""
old_variable = 1
new_variable = old_variable
print(id(old_variable), id(new_variable))   # 二者地址相同,完全为一个变量
new_variable = 10                           # 此时,系统会给10开辟一个新地址,然后赋给new_variable,此时地址改变
print(old_variable, new_variable)           # 二者地址已经不同,互相独立
print(id(old_variable), id(new_variable))
--------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值