博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day07补充-数据类型总结及拷贝
阅读量:4359 次
发布时间:2019-06-07

本文共 4565 字,大约阅读时间需要 15 分钟。

目录

数据类型总结

按照存一个值 OR 多个值来分

  • 字符串、整型、浮点型存一个值
  • 列表、元组、字典、集合存多个值

按照有序 OR 无序来分

  • 字符串、列表、元组是有序数据
  • 字典、集合是无序数据

按照可变 OR 不可变来分

  • 列表、字典、集合是可变数据类型
  • 整型、浮点型、字符串是不可变数据类型

拷贝 && 浅拷贝 && 深拷贝&& .copy()

如果 l2 是 l1的拷贝对象,l1发生改变改变,则l2也会发生改变: 因为l1与l2指向同一个内存地址id,l1是可变数据类型,值变化时id不改变,因此l2跟着改变

l1 = ['a','b','c',['d','e','f']]l2 = l1l1.append('g')print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068776007112,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']l1内存地址为2068776007112,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']

浅拷贝:如果l2是l1的浅拷贝对象,l1内部的不可变数据发生改变,则l2不变,如果l1内部的可变对象发生改变,l2也会跟着改变

import copyl1 = ['a','b','c',['d','e','f']]        l2 = l1.copy()l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")print('*'*80)import copyl1 = ['a','b','c',['d','e','f']]l2 = l1.copy()l1[3].append('g')        # 改变l1中的可变数据类型,l2也会跟着改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068778801352,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']l2内存地址为2068778814984,打印值为['a', 'b', 'c', ['d', 'e', 'f']]********************************************************************************l1内存地址为2068778811720,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]l2内存地址为2068778802376,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]

深拷贝:如果l2是l1的深拷贝对象,l1内部的不可变对象发生改变,则l2不变,如果l1内部的可变对象发生改变,l2也不会改变。即:l1的改变不会影响l2

import copyl1 = ['a','b','c',['d','e','f']]l2 = copy.deepcopy(l1)l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")print('*'*80)import copyl1 = ['a','b','c',['d','e','f']]l2 = copy.deepcopy(l1)l1[3].append('g')        # 改变l1中的可变数据类型,l2不会改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068778801992,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']l2内存地址为2068778811464,打印值为['a', 'b', 'c', ['d', 'e', 'f']]********************************************************************************l1内存地址为2068778067016,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]l2内存地址为2068776735112,打印值为['a', 'b', 'c', ['d', 'e', 'f']]

copy() 从结果上来看就是浅拷贝

l1 = ['a','b','c',['d','e','f']]l2 = l1.copy()l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")print('*'*80)l1 = ['a','b','c',['d','e','f']]l2 = l1.copy()l1[3].append('g')        # 改变l1中的可变数据类型,l2也会跟着改变print(f"l1内存地址为{id(l1)},打印值为{l1}")print(f"l2内存地址为{id(l2)},打印值为{l2}")



猜年龄游戏

附加一个猜年龄的小游戏,再接再厉....

"""    功能:登录用户猜年龄    作者:前辈眼中的小白    日期: 2019/5/25"""real_age = 23       # 给定正确的年龄login_count = 0     # 控制登录次数count = 0       # 控制猜游戏的次数get_prize = []      # 接收奖品# 奖品列表prize = {'0': 'buwawa',         '1': 'bianxingjingang',         '2': 'aoteman',         '3': 'Python从入门到放弃'         }# 定义用户字典login_info = {'nick': '123',               'jishuxiaobai': '123'               }# 判断登录的次数,最多三次机会while login_count < 3:    # 与用户交互输入登录名和密码    user = input("请输入登录名:").strip()    pwd = input("请输入密码:").strip()    if login_info.get(user) != pwd:        login_count += 1        print(f"用户名或密码错误,还有{3-login_count}次机会")        continue    login_count = 4    print("登录成功,请开始你的冒险之旅")    # 核心代码,开始猜游戏    while count < 3:        age_str = input("Please enter age:").strip()  # 与用户交互输入猜的年龄        # 判断是否是数字        if not age_str.isdigit():            print("请输入数字!!!")            continue        age_int = int(age_str)        # 核心思想,年龄判断是否猜对        if age_int == real_age:            print(f"恭喜,猜对了!!!您可以在以下奖品中选择两件奖品\n{prize}\n")            Y_or_n_prize = input('是否领奖(领奖输入"Y"或者"y"),否则按任意键放弃领奖退出游戏:').strip()            # 放弃领奖            if not (Y_or_n_prize == 'Y' or Y_or_n_prize == 'y'):                print("您已放弃领奖,退出游戏")                break            # 领两件奖品            for i in range(2):                print(f"请选择第{i+1}件奖品,输入对应的数字序号:", end='')                choice = input().strip()                # 判断输入奖品                if choice not in ['0', '1', '2', '3']:                    print('看不懂提示吗?输错了')                    continue                get_prize.append(prize[choice])            print(f"请领取奖品{get_prize}")            break        elif age_int > real_age:            print("猜大了")        else:            print("猜小了")        count += 1        # 猜错三次后,判断是否继续游戏        if count == 3:            game_again = input('是否继续玩游戏,继续请输入"Y"或者"y",退出游戏请输入"N"或者"n":').strip()            if game_again == 'Y' or game_again == 'y':                count = 0            elif game_again == 'N' or game_again == 'n':                            print("你已退出游戏")                break            else:                print("非法输入,请按照要求输入")

转载于:https://www.cnblogs.com/863652104kai/p/10921829.html

你可能感兴趣的文章
正则表达式语法大全
查看>>
《蹭课神器》项目总结
查看>>
HNOI2017
查看>>
winsock 收发广播包 【转】
查看>>
2018-2019-1 20165209 《信息安全系统设计基础》第1周学习总结
查看>>
android View Hierarchry for UI
查看>>
交叉排序
查看>>
关于读取mapper的两种方式
查看>>
WebRTC 中RTT实现方法
查看>>
CentOS7使用yum安装ceph rpm包
查看>>
About_AJAX
查看>>
About_Return
查看>>
10.24给TA的话
查看>>
数组_leetcode209
查看>>
日系插画学习笔记(三):光影与结构
查看>>
C语言——几道习题
查看>>
CentOS——自己安装网卡驱动
查看>>
工具系列 | VScode Remote 远程开发与调试(告别SSH)
查看>>
Django QuestSet API (官方文档)
查看>>
javascript的变量声明、数据类型
查看>>