5python变量类型

python

变量的类型

可变 于 不可变类型

这里的可变于不可变 针对的是变量的id 和value值 id不变的情况下,在原来id基础上(内存地址)的值是不是可以改 可以改的是可变类型 不可以改的是不可变类型

可变类型:旧瓶装新酒 值改变,id不变,证明改的是原值,证明原值是可以被改变的,

不可变类型:新瓶装新酒,无法用旧瓶装新酒 值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的

不可变类型

int类型 folat类型 str类型 bool 布尔类型 是不可变类型 id于value 是一个整体 无法分开

python">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 对于浅层的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的时候 可变类型与不可变类型的操作是不同的,不可变类型用的是原来的内存地址 可变类型会新开辟内存地址。

以上是 5python变量类型 的全部内容, 来源链接: utcz.com/z/530782.html

回到顶部