#类型转换 #int():转换为一个整数,只能转换由纯数字组成的字符串 # a = 1.2 # print(type(a)) # b = int(a) # print(b,type(b)) # print(int(1.8)) #浮点型强转整型会去掉小数点及后面的数值,只保留整数部分 # str -> int # a = int("123") # print(a,type(a)) #如果字符串中有数字和正负号以外的字符就会报错 #print(int('-10')) # +/-写在前面表示正负号,不可以写在后面 #用户从控制台输入,判断年龄 # age = int(input("请输入您的年龄")) #input默认输入的是字符串类型 # print(type(age)) # if age >= 18: # print("成年了") #float(): 转换为一个小数 # print(float(11)) #整型转换为浮点型,会自动添加一位小数 # print(float(-11)) # print(float(+11.676)) #如果字符串中有数字和正负号以外的字符就会报错 #str():转换为字符串类型,任何类型都可以转换成字符串类型 # n = 100 # print(type(n)) ## n2 = str(n) # print(n2,type(n2)) #100 # st = str(-1.80) # print(st,type(st)) #float转换成str会取出来末位为0的小数部分 # li = [1,2,3] # st = str(li) # print(st,type(st)) #输出[1, 2, 3] #eval() 用来执行一个字符串表达式,并返回表达式的值 # print(10+10) # print("10"+"10") # print(eval("10+10")) #20,执行运算,并返回运算值 # print(eval("10"+"10")) #eval()可以实现list.dict.tuple和str之间的转换 #str -> list # st1 = "[[1,2],[3,4],[5,6]]" # print(type(st1)) # li = eval(st1) # print(li,type(li)) #输出[[1, 2], [3, 4], [5, 6]] # #str -> dict # st2 = "{'name':'tiantian','age':18}" # dic = eval(st2) # print(dic,type(dic)) #{'name': 'tiantian', 'age': 18} #list():将可迭代对象转换成列表 #支持转换为list的类型:str.tuple.dict.set #str -> list # print(list('abcdefg')) # tuple -> list # print(list((1,2,3,4))) #dict - > list #print(list({'name':'tiantian','age':18})) #字典转换成列表,会取键名作为列表的值 #set -> list #print(list({'a','b','c','d'})) #基本转换成列表,会先去重,再转换 #赋值: 会随着原对象一起变量 # li = [1,2,3,4] # print(li) # li2 = li #将li直接赋值给li2 # print('li',li) # print('li2',li2) # #给li列表新增元素 # li.append(5) # print('新增后的li',li) # print('新增后的li2',li2) #赋值:等于完全共享资源,一个值的改变会完全被另一个值共享 #浅拷贝 #会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址 # import copy #导入copy模块 # li = [1,2,3,[4,5,6]] #定义一个嵌套列表 # li2 = copy.copy(li) #浅拷贝 # # print('li',li) # # print('li2',li2) # #查看内存地址 id() # print('li内存地址:',id(li),'li2内存地址:',id(li2)) # #内存地址不一样,说明不是同一个对象 # li.append(8) # print('li',li) # print('li2',li2) # #往嵌套列表添加元素 # li[3].append(7) # print('li',li) # print('li2',li2) # #外层的内存地址不同,但是内层的内存地址相同 #深拷贝(数据完全不共享) #外层的对象和内部的元素都拷贝了一遍 # import copy # li = [1,2,3,[4,5,6]] # li2 = copy.deepcopy(li) #深拷贝 # print("li:",li,id(li)) # print("li2:",li2,id(li2)) # li.append(8) # print(li) # print(li2) # #在嵌套列表添加元素 # li[3].append(7) # print(li) # print(li2) # print(id(li[3])) # print(id(li2[3])) # #深拷贝数据变化只影响自己本身,跟原来的对象没有关联 #可变类型 #含义:变量对应的值可以修改,但是内存地址不会发生改变 #常见的可变类型: list. dict . set # li = [1,2,3,4] # print("li原内存地址",id(li)) # li.append(5) # print(li) # print("li现内存地址",id(li)) # dic = {"name":'tiantian',"age":'18'} # print(dic,id(dic)) # dic["name"] = 'TT' # print(dic,id(dic)) # set = {1,2,3,4,5} # print(set,id(set)) # set.remove(3) #删除元素 # print(set,id(set)) #不可变对象 #含义:变量对应的值不能被修改,如果修改就会生成一个新的值从而分配新的内存空间 # n = 10 #整型 # print("原地址:",n,id(n)) # n = 15 # print("修改后:",n,id(n)) # #内存地址不一样:修改n的值就会生成新的值,重新赋值给变量n # st = 'hello' #字符串 # print(st,id(st)) # st = 'tiantian' # print(st,id(st)) # tua = (1,2,3) # print(tua,id(tua)) # #不支持新增删除和修改操作 # tua = ('a','b','c') # print(tua,id(tua)) #深浅拷贝只针对可变对象,不可变对象没有拷贝的说法