python基础—深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换

1191-杨同学

发表文章数:32

首页 » Python » 正文

1. 深拷贝和浅拷贝

定义

浅拷贝:不拷贝子对象的内容,只拷贝子对象的引用;
深拷贝:将子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。

工具

copy模块的copy(浅拷贝)、deepcopy(深拷贝)。

例:

浅拷贝:

a = [10, 20, [5, 6]]
b = copy.copy(a)
print("a:", a)
print("b:", b)
b.append(30)
b[2].append(7)
print("浅拷贝后……")
print("b:", b)  # b: [10, 20, [5, 6, 7], 30]
print("a:", a)  # a: [10, 20, [5, 6, 7]]

分析:
python基础---深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换
深拷贝:

a = [10, 20, [5, 6]]
b = copy.deepcopy(a)
print("a:", a)
print("b:", b)
b.append(30)
b[2].append(7)
print("深拷贝后……")
print("b:", b)  # b: [10, 20, [5, 6, 7], 30]
print("a:", a)  # a: [10, 20, [5, 6]]

分析:
python基础---深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换

2. 函数中参数的传递

python中一切皆对象,所有的赋值操作都是引用的赋值,所以python中参数的传递都是引用传递。

a = 6
b = a
print(b)  # 6
a = 8
print(b)  # 6
a = [6, 8]  # 列表是可变的
b = a
print(b)  # [6, 8]
a.append(10)
print(b)  # [6, 8, 10]

  1. 传递的参数是可变对象(字典、列表、集合等)。对可变对象进行“写操作”,直接作用于对象本身,在函数体中不创建新的拷贝。
a = [6, 8]
print(id(a))  # 2383737429448


def test(m):
    m.append(10)
    print("m:", m, id(m))  # m: [6, 8, 10] 2383737429448


if __name__ == '__main__':
    test(a)~
  1. 传递的参数是不可变对象(数字、元组、字符串等),在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象(开辟新内存空间)。
def test(m):
    m = m + 1
    print("m:", m, id(m))


if __name__ == '__main__':
    a = 1
    print(id(a))
    test(a)
    print("a:", a, id(a))

运行结果:
python基础---深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换

  1. 传递的不可变对象的子对象是可变对象:
def test(m):
    m[2].append(6)
    print("m:", m, id(m))


if __name__ == '__main__':
    a = (3, 9, [6, 8])
    print(id(a))
    
    test(a)
    
    print("a:", a, id(a))

运行结果:
python基础---深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换

3. lambda表达式和匿名函数

  1. lambda(λ)表达式可以用来声明匿名函数。lambda函数是一种简单的、在同一行中定义函数的方法,实际生成了一个函数对象。
  2. lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。
  3. lambda表达式的基本语法:
    lambda arg1,arg2,…… :表达式
f = lambda a, b, c: a+b+c
print(f(2, 3, 4))  # 9

g = [lambda a:a*2, lambda b:b*3, lambda c:c**2]
print(g[2](3))  # 9

4. 嵌套列表整合成一个列表

a = [[1, 2, 3], [4, 7, 8]]
b = [i for j in a for i in j]
print(b)  # [1, 2, 3, 4, 7, 8]
import numpy as np

a = np.array([[4,5,6],[7,8,9]])
print(a)

b = [i for j in a for i in j]
print(b)  

运行结果:
python基础---深浅拷贝、函数中参数传递、lambda表达式、嵌套列表整合成一个列表、pycharm中的查找替换

5. pycharm中的查找替换

  1. ctrl+shift+f:全局查找;
    ctrl+shift+r: 全局替换
  2. 安装vim插件后进入可视模式:
    :%s/旧文本/新文本/g
    :2,6 s/旧文本/新文本/g (第二行到第六行或选中几行)
分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录