变量的类型python
可变 于 不可变类型code
这里的可变于不可变 针对的是变量的id 和value值 id不变的状况下,在原来id基础上(内存地址)的值是否是能够改 能够改的是可变类型 不能够改的是不可变类型内存
可变类型:旧瓶装新酒 值改变,id不变,证实改的是原值,证实原值是能够被改变的,字符串
不可变类型:新瓶装新酒,没法用旧瓶装新酒 值改变,id也变了,证实是产生新的值,压根没有改变原值,证实原值是不能够被修改的class
int类型 folat类型 str类型 bool 布尔类型 是不可变类型 id于value 是一个总体 没法分开import
a = 10 print(id(a)) a = 1000 print(id(a))
140703328683968
2810231683568基础
a = 134.5 print(id(a)) a = 1314.97 print(id(a))
1888924248944
1888922137744阿里巴巴
a = "阿里巴巴是个快乐的青年" print(id(a)) a = "阿里巴巴不快乐拉" print(id(a))
2032669169104
2032669237968变量
a=(10>9)
print(id(a))
140703328405328
a=(10<9)
print(id(a))
140703328405360循环
list dic 可变类型
list_t = [1, 2, 3, 4, 5] print(id(list_t)) list_t[0] = 75589 print(list_t, id(list_t))
1262084012544
[75589, 2, 3, 4, 5] 1262084012544
也就是list_t中的值能够改 list_t的id不变
list_t = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5} print(id(list_t)) list_t['a'] = 75589 print(list_t, id(list_t))
2702791492992
{'a': 75589, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 2702791492992
在字典中 字典的key 也就是上面的a b c d e 必须是不可变类型
循环判断前置内容 条件
什么内容能够做为判断的条件那
条件能够分为两种 一种是显示条件 一种是隐士条件
显示条件
if 10 > 6 and 10 > 7:# 这种判断条件 数字判断 逻辑判断均可以做为判断条件 最终得出的是True 或这false print("你个傻子") if True: # 也能够直接用Ture false做为判断条件 print("你个大傻子")
你个傻子
你个大傻子
隐式布尔值是
int数字类型 float 浮点型 str 字符串类型 llist列表 dic字典都是True
if 10: print("你个傻子") if "a": print("你个大傻子") if 3.14: print("你个大傻子") if [2, 3, 4]: print("你个大傻子") if {"阿里": '23'}: print("你个大傻子")
上面这些值都为True 都会执行 你个大傻子
0 空值 None 三种为隐式的false类型
if 0: print("你个傻子") else: print("你不是个傻子") if []: print("你个傻子") else: print("你不是个傻子") if {}: print("你个傻子") else: print("你不是个傻子") if None: print("你个傻子") else: print("你不是个傻子")
以上这些都会判断为false 执行 你不是个傻子 这句话。
浅层copy 对于浅层的copy 在可变数据类型上, 两个数据之间是有关联的 没法彻底分开
list1 = [12, 34, ['alin']] list2 = list1.copy() print(id(list1[0]), id(list1[1]), id(list1[2])) #copy的两个变量数据的内存地址同样 print(id(list2[0]), id(list2[1]), id(list2[2])) list1[0] = 567 print(list1[0], id(list1[0]), list2[0], id(list2[0])) #对于不可变类型,会生成新的内存地址和值 copy的list2不受影响 list1[2][0] = 'alix' print(list1[2], id(list1[2]), list2[2], id(list2[2])) #对于可变类型, list1与list2是相互影响的,修改了list1 list2中的值也跟着变化,同时是在原有的内存空间修改的
140737487882240 140737487882944 1883384888064
140737487882240 140737487882944 1883384888064
567 1883382446576 12 140737487882240
['alix'] 2372841945600 ['alix'] 2372841945600
深层copy
import copy #引入包 list1 = [12, 34, ['alin']] list2 = copy.deepcopy(list1) # 深层copy print(id(list1[0]), id(list1[1]), id(list1[2])) print(id(list2[0]), id(list2[1]), id(list2[2])) #copy后 可变与不可变类型的开始不一样了,可变数据类型有了新的内存地址 list1[0] = 567 print(list1[0], id(list1[0]), list2[0], id(list2[0])) list1[2][0] = 'alix' print(list1[2], id(list1[2]), list2[2], id(list2[2])) #可变与不可变类型 两个变量都是完独立开的 不受影响。
140737487882240 140737487882944 2121942939712
140737487882240 140737487882944 2121942907328
567 2121940498928 12 140737487882240
['alix'] 2121942939712 ['alin'] 2121942907328
总结:
浅copy 与深copy不一样
浅copy没有把可变类型与不可变类型区分开,当可变类型发生变化的时候,copy的两个变量都会发生变化 ,没有彻底区分开两个变量。深层copy经过import copy 当copy的时候 可变类型与不可变类型的操做是不一样的,不可变类型用的是原来的内存地址 可变类型会新开辟内存地址。