zoukankan      html  css  js  c++  java
  • Python基础数据类型补充及深浅拷贝

    -*-coding:utf-8 -*-
    ascii 不支持中文
    gbk 支持中文 2个字节 包含ascii码
    unicode 万国码 python3 内存unicode
    utf-8 可变的长 英文 1 字节 欧洲2个字节 亚洲3个字节

    unicode 内存
    硬盘 utf-8 字节 存储 传送

    s = '澳门'
    a = 'alexsb'
    s1 = s.encode('utf-8') # 编码 编码集
    print(s1) # b'xe6xbexb3xe9x97xa8'
    print(s1.decode('utf-8'))
    a1 = a.encode('utf-8') # b'alexsb'
    print(a1)
    s2 = s.encode('gbk')
    print(s2) # b'xb0xc4xc3xc5'
    a2 = a.encode('gbk') # b'alexsb'
    print(a2)
    s3 = s.encode('utf-8')
    print(s3.decode('gbk')) # 不能使得

    s = 'alex'
    s1 = s.encode('utf-8') # 编码 utf-8 包含了ascii
    print(s1.decode('gbk')) # 解码 gbk 包含了ascii

    应用场景: 文件操作 网络传输 网络编程

    坑 基础数据补充

    li = [1,2,3,4,5,0,0,0,0,0,0,0,0,0]

    for i in li:
    li.append(0)
    print(li) # [1,2,3,4,5,0,0,0,0,0]

    li = [12,2,3,4,5]
    for i in li:
    li.append(i)
    print(li)
    print(li)


    for i in li:
    li.remove(i)
    print(li) # 结果[2,4]

    for i in li:
    li.pop()
    print(li)



    li = [1,2,3,4,5]
    for i in li:
    del li[-1]
    print(li)





    for i in range(len(li)): # 行
    li.pop()
    print(li)

    li = [1,2,3,4,5] # 行
    l2 = []
    for i in li:
    l2.append(i)
    for j in l2:
    li.remove(j)
    print(li)

    for i in li:
    li.clear() # 实在不行的
    print(li)

    dic = {'1':22,'5':'22'}
    for i in dic:
    dic['6'] = 1
    print(dic)

    lst = []
    for i in dic:
    lst.append(i) # 每个字典的键
    for j in lst:
    dic.pop(j)
    print(dic)


    dic = dict.fromkeys('年后啊','消愁')

    第一个位置是可迭代对象,也就是字典的键
    第二个位置 不写是None 也就是字典的值

    print(dic)
    dic['年'] = '今天老子不上班' # 字符串不能修改
    print(dic)

    dic['你'] = [5,6,7]
    print(dic)
    dic = dict.fromkeys('你好啊',[1,2,3])
    print(dic)
    dic['你'].append(99)
    print(dic)

    深浅拷贝

    li = [1,2,3,4]
    lst = li.copy()
    print(li)
    print(lst)

    print(id(li)) # 34512776
    print(id(lst)) # 34512840

    li[0] = 56
    print(li) # 变
    print(lst) # 不变



    print(id(li[0])) # 1548382960
    print(id(lst[0])) # 1548381200

    print(id(li[1])) # 1548381232
    print(id(lst[1])) # 1548381232


    li = [1,2,3,4,[5,6,7]] # 浅拷贝只拷贝一层元素
    lst = li.copy()
    # print(li)
    # print(lst)

    li[-1].append(90)
    print(li) # 变
    print(lst) # 变

    print(id(li[-1]))
    print(id(lst[-1]))


    li = [1,2,3,4] # 赋值
    lst = li
    print(li)
    print(lst)

    li[0] = 56
    print(li)
    print(lst)

    import copy

    li = [1,2,3,4,[5,6,7]]
    lst = copy.deepcopy(li) # 深拷贝
    # 浅拷贝只拷贝第一层元素,元素是不可变的,就不会变 元素是可变的俩个同时变
    print(li)
    print(lst)
    print(id(li)) # 40289984
    print(id(lst)) # 40305368

    li[-1].append(90)
    print(li) # 变
    print(lst) # 不变

    print(id(li[-1])) #38783856
    print(id(lst[-1])) #38798000

    import copy

    li = [1,2,3,4,[5,6,7]]

    lst = copy.deepcopy(li)

    print(id(lst[-2])) # 39584432
    print(id(li[-2])) # 39570288

    面试题:

    li = [1,2] # li = [1,[1,[1,[1,2]]]]
    li[1] = li
    print(li)
    结果 [1, [...]]

    is == 区别

    a = 1000
    b = 1000
    print(a == b)
    print(id(a))
    print(id(b))
    print(a is b) # is 是

    == 比较两边的值 # 看这俩人是不是长得一样
    is 比较两边的内存地址 # 判断是不是一个 身份证号


    代码块

    def func():
    a = 'asd@fasdf'* 20
    print(id(a))
    def func1():
    b = 'asd@fasdf'* 20
    print(id(b))
    print(func(),func1())

    a = 100000000
    b = 100000000
    c = 100000000
    d = 100000000

    一个文件就是一个代码块:

    print(a is b) # 节省资源


    代码块机制:

    数字: -5 ~ 256
    字符串: 乘法的时候总长度不能超过20

    代码块 > 小数据

    s = '222222222222222222222222222222222222222222222222222222'
    f = '222222222222222222222222222222222222222222222222222222'

    print(s is f)

    s = 'asdsr' * -50
    d = 'asdsr' * -50
    print(s is d)

    a = '12221341asdfadsfasxzvdasfasdfewfwfvxasgfrqegvewrgavrgvaerg'
    b = '12221341asdfadsfasxzvdasfasdfewfwfvxasgfrqegvewrgavrgvaerg'

    a = '@'* 2
    b = '@'* 2

  • 相关阅读:
    【BZOJ-1060】时态同步 树形DP (DFS爆搜)
    【BZOJ-1468】Tree 树分治
    【BZOJ-1097】旅游景点atr SPFA + 状压DP
    【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用流)
    【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
    【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用流)
    【BZOJ-3275&3158】Number&千钧一发 最小割
    【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)
    【BZOJ-1367】sequence 可并堆+中位数
    【BZOJ-1455】罗马游戏 可并堆 (左偏树)
  • 原文地址:https://www.cnblogs.com/YZL2333/p/10226453.html
Copyright © 2011-2022 走看看