Python基础-基础数据类型总结

一、总结

1、基本数据类型之间的特点比较

  • 列表list:有序的,可修改,允许重复的。
  • 元组tuple:有序,本身不可修改(元素如果是可变类型,内部可以修改),允许重复。
  • 字典dict:无序,可修改,key唯一,value允许重复。
  • 集合set:无序,不允许重复,本身可修改(元素不能是列表,字典等可变类型)

2、数据类型的创建及补充

  • int
# 创建方法
n = 122
n1 = int('122')
print(type(n))     #class int
#查看变量指向内存地址   id()
print(id(n))       #1542308704  id地址

  • str
#创建方法
S1 = str()     #空字符
S2 = ‘fei'
s3 = str(5)
#不可变
print(s2[1])
s2[1] = 's'    #错误

#字节bytes和字符str的相互转换
name = "李品勇“
#字符转换为字节
b1 = bytes(name, encoding='utf-8')

#字符串的转义
print('after\noon')   #\n  换行符 after
                                  oon
#消除\的转义
print('after\\oon')   #after\oon   
print(r'after\oon')   #after\oon       
#*
print("="*30)         #============================

#字符串的格式化%    format{} (python特有的)%d-%d-%d" %()
"{}-{}-{}".format()
%s 字符串  %d 十进制的数字
year = 2019
month = 3
day = 2 
#格式化日期
print(%d-%d-%d' %(year, month, day))    #2019-3-2
print(%04d-%02d-%02d' %(year, month, day)) #2019-03-02
 
print('%d % 10)    #10    10进制
print('%o % 10)    #12    八进制
print('%x % 10)    #a     十六进制
print('%e % 3.14159256)   #3.141593e+00 #浮点
print('%.2e % 3.14159256)  #3.14e+00

#format
#必须一一对应,否则会报错、
s = "name %s, age %d, %s" % ("原擎", 18, "QAQ") 
 #name 原擎, age 18, QAQ
 
#无需一一对应 (python 自带)
s = "name {}, age {}, {}" .format("原擎", 18, "QAQ")
 #name 原擎, age 18, QAQ
s = "name {0}, age {1}, {0}" .format("原擎", 18)
 #name 原擎, age 18, 原擎     用到2个相同的数值

L = ["原擎", 18]                  
s = "name {0}, age {1}, {0}" .format(*L)
 #name 原擎, age 18, 原擎      拿到的是list 直接放进去
 
s = "name {name}, age {age}, {name}" .format(age=18, name="原擎")
print(s) 
 #name 原擎, age 18, 原擎      不按照顺序排列 可以无序  

s = "money{:f}元“.format(4.5)  #money4.5元  这样必须传浮点数

# *代表列表  **代表字典
s = "name {name}, age {age}, {name}" .format(age=18, name="原擎")
d = {“age”=18, “name”="原擎"}
s = "name {name}, age {age}, {name}" .format(**d)
  # name 原擎, age 18, 原擎      **必须是字典
  
s = "num : {0:b},{0:o},{0:d},{0:x},{0:X},{0:e},{0:%}".format(10)
print(s)
   #1010,12,10,a,A,1.000000e+01,1000.000000%
  • list
#创建方法
s = [1, 2, 3, 4]
s1 = list()
s2 = list({1, 2, 3, 4})

#转换
name = '韩文为’
s3 = list(name)   #['韩‘, ’文‘, ’为‘]
  • tuple
#创建方法
s = (1,2)
s1 = tupel()
s2 = tupel(S)

#嵌套
s = (11, 22, ['fei'. {'k1':'v1'}])  如果要取'v1'
print(s[2][1]['k1'])  #v1   

#如果要增加'k2': 'v2'
s[2][1]['k2'] = 'v2'
s[2][1].update({'k3':'v3'})  
  • dict
#创建方法
s = {'k1': 123}            #{'k1': 123}
s1 = dict(k1=456, k2=789)  #{'k1=456', 'k2=789'}

#fromkeys()map()
s = [1, 2, 3,]              把列表变成字典
s1 = {}
print(s1.fromkeys(s))      #{1: None, 2: None, 3: None}
print(s1.fromkeys(s: 'v')) #{1: 'v', 2: 'v', 3: 'v'}
  • set
#创建方法
s = {11, 22, 33}
s = set()

3、深浅复制

字符串 和数字 : 赋值、深浅拷贝无意义,应为它永远指向同一地址 不可改变。

  • 赋值:只是创建一个变量,该变量指向原来的内存地址
    n2 = n1 两个都指向一个地址id
n1 = {"k1": "fei", "k2": 123, "k3": ["fly", 18]}
n2 = n1   # 指向同一个ID
n1["k1"] = "yuan" # n1里面数据发生变化 n2也会改变 不管第几层
print(n1)  #{'k1': 'yuan', 'k2': 123, 'k3': ['fly', 18]}
print(n2)  #{'k1': 'yuan', 'k2': 123, 'k3': ['fly', 18]}
  • 浅拷贝:在内存里只额外创建了一层数据 第二层数据公用一个地址。
n1 = {"k1": "fei", "k2": 123, "k3": ["fly", 18]}
n3 = copy.copy(n1)
n1["k1"] = "yua"      #n1第一层改了 n3是不会变的
print(n1) #{'k1': 'yuan', 'k2': 123, 'k3': ['fly', 18]}
print(n3) # {'k1': 'fei', 'k2': 123, 'k3': ['fly', 18]}
n1["k3"][0] = "yuan"  # n1第二层改了 n3是会变的
print(n1)  # {'k1': 'yuan', 'k2': 123, 'k3': ['yuan', 18]}
print(n3)  # {'k1': 'yuan', 'k2': 123, 'k3': ['yuan', 18]}                  
  • 深拷贝 :在内存里创建了一个新的地址 怎么改n1 n3都不变
n1 = {"k1": "fei", "k2": 123, "k3": ["fly", 18]}
n3 = copy.deepcopy(n1)
n1["k1"] = "yua"     # 第一层数据改变  n3不会变
print(n1)  #{'k1': 'yua', 'k2': 123, 'k3': ['fly', 18]}
print(n3)  #{'k1': 'fei', 'k2': 123, 'k3': ['fly', 18]}
n1["k3"][0] = "1"
print(n1)           # 第二层数据改变 n3不会变             
print(n3)       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值