当前位置: 首页 > article >正文

【python基础巩固】引用、浅深拷贝你分清了吗?

引用、浅拷贝深拷贝

下面代码运行后,a、b、c、d四个变量的值,描述错误的是?

import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')

这段代码的意思是:

import copy
 a = [1, 2, 3, 4, ['a', 'b']] 
 b = a     # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
 c = copy.copy(a)   # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变
 d = copy.deepcopy(a) #深拷贝,完全拷贝,完全独立于原对象,a变也不变
 a.append(5) # 改变父对象
  a[4].append('c')  #改变父对象中的 ['a', 'b']子对象 

因此结果是:
a=[1, 2, 3, 4, [‘a’, ‘b’,‘c’],5]
b=[1, 2, 3, 4, [‘a’, ‘b’,‘c’],5]
c=[1, 2, 3, 4, [‘a’, ‘b’,‘c’]]
d=[1, 2, 3, 4, [‘a’, ‘b’]]

练习:拔高题

1、python变量的查找顺序为局部作用域>外部嵌套作用域>全局作用域>内置模块作用域。
python中的4种作用域
L:Local,局部作用域,也就是我们在函数中定义的变量;
E:Enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:Globa,全局变量,就是模块级别定义的变量;
B:Built-in,系统内置模块里面的变量,比如int, bytearray等。
2、python my.py v1 v2 命令运行脚本,通过 from sys import argv如何获得v2的参数值?( )
argv[2]
sys.argv是传递给python脚本的命令行参数字符串列表,argv[0]为该脚本自身路径,其余为命令行参数。
sys.argv是命令参数表,包括文件名
argv[0]: 【path】/my.py
argv[1]: v1
argv[2]: v2
3、下列程序打印结果为()

import re 
str1 = "Python's features" 
str2 = re.match( r'(.*)on(.*?) .*', str1, re.M|re.I)
print str2.group(1)

答案:
Pyth
解析:
re模块实现正则的功能
re.match(正则表达式,要匹配的字符串,[匹配模式])
要匹配的字符串为str1 = “Python’s features”

正则表达式r’(.)on(.?) .*’
r表示后面的字符串是一个普通字符串(比如\n会译为\和n,而不是换行符)
()符号包住的数据为要提取的数据,通常与.group()函数连用。
.匹配单个任意字符
*匹配前一个字符出现0次或无限次
?匹配前一个字符出现0次或1次

(.)提取的数据为str1字符串中on左边的所有字符,即Pyth
(.
?)提取的数据为str1中on右边,空格前面,即’s

.group(0)输出的是匹配正则表达式整体结果
.group(1) 列出第一个括号匹配部分,.group(2) 列出第二个括号匹配部分
4、分析代码:

class Rect:
def __init__(self,width,height):
self.width = width
self.height = height
@property
def area(self):
return self.height* self.width
rect = Rect(10,20)
rect.area()

使用property会将方法转为属性,因此rect.area()应该改为rect.area。

a = 0
def fun():
a += 1
print(a)
fun()

当给作用域中的一个变量赋值时,Python 会自动的把它当做是当前作用域的局部变量,从而会隐藏外部作用域中的同名变量,因此a += 1会报错。

class Animal:
def __init__(self,color="白色"):
Animal.color = color
def get_color(self):
print("Animal的颜色为",Animal.color)
class Cat(Animal):
def __init__(self):
pass
cat = Cat()
cat.get_color()

子类若有定义__init__()函数时,将不会自动继承父类的构造函数,因此在调用父类的get_color()函数时,会出现Animal找不到属性color,修改时只需在子类的__init__()函数中添加语句:super().init()。

class Cat:
def __init__(self,color="白色"):
self.__color = color
cat = Cat("绿色")
print(cat._Cat__color)

尽管color属性为私有属性,但是在类外部使用时,仍可以通过实例名._类名__xxx来访问。
5、以下程序要求用户输入二进制数字0/1并显示之,请指出程序中代码第几行存在错误()

1.bit = input("Enter a binary digit:")
2.if bit = 0 or 1:
3.    print("your input is" ,bit)
4.else
5.    print("your input is invalid")

第2行语法错误,第4行else后缺少冒号。


http://www.kler.cn/a/405380.html

相关文章:

  • 使用 npm 安装 Electron 作为开发依赖
  • MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)
  • 【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析
  • vue中路由缓存
  • 【前端知识】nodejs项目配置package.json深入解读
  • AI一键生成原创花卉印花图案——创新与效率的结合
  • 【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
  • 私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
  • 前端:HTML (学习笔记)【2】
  • 提升性能测试效率与准确性:深入解析JMeter中的各类定时器
  • jdk各个版本介绍
  • java学习-集合
  • 数据新时代:如何选择现代数据治理平台(上)
  • 数据结构及算法--排序篇
  • 如何能让安全责任更清晰——构建清晰安全责任体系策略与实践
  • 数字IC后端实现时钟树综合系列教程 | Clock Tree,Clock Skew Group之间的区别和联系
  • 【工程记录】vscode+ssh远程配置python环境方法
  • 嵌入式:STM32的启动(Startup)文件解析
  • 生成式AI在教育技术中的应用:变革与创新
  • 开源生态发展合作倡议
  • 蓝桥杯-顺子日期
  • wireshark使用lua解析自定义协议
  • 神经网络问题之:梯度不稳定
  • 开源 LLM 网关:APIPark 能做什么?
  • python获取本地电脑的ip和mac地址
  • Python后端入门