Skip to main content

Python 不可变(Immutable)对象与变量传递机制详解

· 3 min read

一、Python 不可变(Immutable)对象

1. 不可变对象类型

Python 中的不可变对象包括:

  • 数字类型:int, float, bool, complex
  • 字符串:str
  • 元组:tuple
  • 冻结集合:frozenset
  • bytes

2. 不可变特性表现

a = 10
b = a
a = 20 # 创建新对象,而不是修改原有对象
print(b) # 输出10,b不受a改变影响

s = "hello"
s[0] = "H" # 报错:TypeError,字符串不可变

3. 不可变对象的内存机制

a = 256
b = 256
print(a is b) # True,小整数池优化

c = 257
d = 257
print(c is d) # False,大整数不共享

二、可变(Mutable)对象

1. 可变对象类型

  • 列表:list
  • 字典:dict
  • 集合:set
  • 字节数组:bytearray
  • 自定义类对象

2. 可变特性表现

lst1 = [1, 2, 3]
lst2 = lst1
lst1.append(4)
print(lst2) # [1, 2, 3, 4],lst2也被修改

三、Python 变量传递机制

1. 按对象引用传递

Python 中所有参数传递都是按对象引用传递,但效果取决于对象类型:

  • 不可变对象:函数内修改会创建新对象,不影响原始值
  • 可变对象:函数内修改会影响原始对象

2. 函数参数传递示例

(1) 传递不可变对象

def modify_num(x):
x = x + 10
print("函数内x:", x) # 15

num = 5
modify_num(num)
print("原始num:", num) # 5(未改变)

(2) 传递可变对象

def modify_list(lst):
lst.append(4)
print("函数内lst:", lst) # [1, 2, 3, 4]

my_list = [1, 2, 3]
modify_list(my_list)
print("原始my_list:", my_list) # [1, 2, 3, 4](已改变)

3. 避免意外修改的解决方案

(1) 使用不可变对象

def safe_func(t):
t = t + (4,) # 创建新元组
print(t) # (1, 2, 3, 4)

orig_tuple = (1, 2, 3)
safe_func(orig_tuple)
print(orig_tuple) # (1, 2, 3)

(2) 创建副本

def safe_modify(lst):
lst_copy = lst.copy() # 或 list(lst) 或 lst[:]
lst_copy.append(4)
print("副本:", lst_copy) # [1, 2, 3, 4]

original = [1, 2, 3]
safe_modify(original)
print("原始:", original) # [1, 2, 3]

四、高级主题:深浅拷贝

特性浅拷贝 (Shallow Copy)深拷贝 (Deep Copy)
复制深度只复制最外层容器,内部元素保持引用关系递归复制所有嵌套对象,创建完全独立的新对象
内存占用较少较多
执行速度较快较慢
适用场景简单对象或明确不需要嵌套复制的情况复杂嵌套对象需要完全独立的情况
修改影响修改嵌套对象会影响原对象修改任何级别都不会影响原对象

1. 浅拷贝(shallow copy)

import copy

lst1 = [1, [2, 3], 4]
lst2 = copy.copy(lst1)

lst1[1][0] = 99
print(lst2) # [1, [99, 3], 4] 嵌套对象被修改

2. 深拷贝(deep copy)

import copy

lst1 = [1, [2, 3], 4]
lst2 = copy.deepcopy(lst1)

lst1[1][0] = 99
print(lst2) # [1, [2, 3], 4] 完全独立

五、实际应用建议

  1. API 设计:如果函数不应修改传入的可变参数,应在文档中明确说明
  2. 线程安全:不可变对象天然线程安全
  3. 字典键:只能使用不可变对象作为字典键
  4. 性能考虑:频繁修改字符串应考虑使用listbytearray

从零部署构建 Faas (Function As A Service)

· 4 min read

关键术语

  • Python 函数- 可重复使用的代码块,用于接收输入、处理和返回输出。基本的构建模块。
  • Python Fire- 一个从任何 Python 对象或函数自动生成 CLI 的库,使其成为一个可定制的命令行工具。
  • 命令行界面 (CLI)- 基于文本的用户界面,通过键入提示和输入执行命令。实现自动化。
  • 云函数- 无需管理服务器即可执行代码,以响应 HTTP 或数据库变化等事件。
  • Azure 功能- 微软云托管的无服务器计算服务,用于执行事件驱动功能。
  • 持续集成Continuous Integration)--通过将开发人员提交的代码合并到主线分支(由推送请求触发),对代码更改进行自动测试和验证。

从零构建 Python 函数并部署

金融资产定价模型 Asset Pricing Model (Firm Value, Share, Bond)

· 3 min read

企业价值 Firm Value

企业价值公式

[i=1tCFt(1+WACC)t][\sum_{i=1}^t \frac{CF_t}{(1+WACC)^t}] [WACC=EV×re+DV×rd×(1Tc)][\text{WACC} = \frac{E}{V} \times r_e + \frac{D}{V} \times r_d \times (1 - T_c)]
  • EE:公司权益的市场价值
  • DD:公司债务的市场价值
  • V=E+DV=E+D:公司的总价值(权益 + 债务)
  • rer_e​:权益成本(如 CAPM 计算得出的股权回报率)
  • rdr_d​:债务成本(借贷利率)
  • TcT_c​:企业所得税率

两个最近碰到棘手的技术问题

· One min read

问题一: Python 环境无法退出

碰到个很棘手的问题,vsc 里面,我创建了 python venv, 启动后,我把 venv 删掉了,导致无法正常退出 之前删除的 venv。

利用 GitHub 生态系统进行开发

· 8 min read

关键术语

  • Codespaces- 由 GitHub 托管的基于云的一次性开发环境。提供可重现性和自定义功能。
  • 可重复性--可靠地重新创建环境并获得相同结果的能力。代码空间通过容器确保了这一点。
  • 容器映像(Container Image)- 一种轻量级、独立、可执行的软件包,允许代码跨环境快速、可靠地运行。
  • GPU- 利用专用硬件加速机器学习模型构建/训练的图形处理单元。
  • Copilot- GitHub 的人工智能配对程序员,可在开发人员输入代码时向其推荐代码和整个函数。
  • 持续集成(Continuous Integration)- 通过自动构建和测试流程,频繁合并代码变更并验证每项变更的开发实践。
  • 持续交付(Continuous Delivery)--软件方法论,团队可通过自动部署快速、可靠、可持续地向用户发布新变更。

云开发人员工作区

SSD: Solid State Drive

使用管道进行数据运维

· 3 min read

关键术语

  • AWS Step Functions- 一种无服务器协调服务,可让您使用可视化工作流协调分布式应用程序和微服务的组件。
  • AWS Batch- 一种托管计算服务,可在 AWS 上调度和运行任何规模的批量计算工作负载。自动提供资源。
  • AWS Glue- 无服务器 ETL 和数据集成服务,可为分析和机器学习准备和转换数据。
  • ETL 管道- 从数据源提取数据、处理/清理数据并将其加载到目标数据库或数据仓库的提取、转换和加载管道。
  • 无服务器管道 - 使用 Lambda、Glue、Batch 和 Step Functions 等云服务来构建可自动管理基础设施的数据管道。
  • DataOps- 协作数据管理实践,侧重于通过自动化基础设施提高数据交付的质量和速度。

Quantitative Finance(量化金融)核心术语(中英对照)

· 4 min read

以下是量化金融领域的关键术语,涵盖资产定价、算法交易、风险管理、衍生品模型等场景,按类别分类整理:


1. 资产定价(Asset Pricing)

英文中文说明
Arbitrage Pricing Theory (APT)套利定价理论基于多因子解释资产收益率的模型(比 CAPM 更灵活)。
Capital Asset Pricing Model (CAPM)资本资产定价模型描述资产预期收益率与市场风险(β)的关系:(E(Ri)=Rf+βi(E(Rm)Rf))(E(R_i) = R_f + \beta_i (E(R_m) - R_f))
Fama-French Three-Factor Model法玛-弗伦奇三因子模型扩展 CAPM,加入市值(SMB)和价值(HML)因子。
Carhart Four-Factor Model卡哈特四因子模型在三因子基础上加入动量因子(MOM)。
Risk-Neutral Pricing风险中性定价衍生品定价中假设投资者风险中性,用无风险利率折现预期收益。
Stochastic Discount Factor (SDF)随机贴现因子将未来现金流折现到当前的一般化定价框架。

风险管理(Risk Management)常用术语(中英对照)

· 5 min read

以下是金融风险管理领域的核心术语,涵盖市场风险、信用风险、操作风险、流动性风险等场景,按类别分类整理:


1. 市场风险(Market Risk)

英文中文说明
Value at Risk (VaR)风险价值在特定置信水平(如 95%)下的最大潜在损失。
Expected Shortfall (ES/CVaR)预期短缺/条件风险价值超过 VaR 阈值的平均损失(衡量极端风险)。
Greeks (Delta, Gamma, Vega, etc.)希腊字母(Delta、Gamma、Vega 等)衡量衍生品价格对市场因素的敏感性(如 Delta=期权价格对标的资产价格的敏感度)。
Stress Testing压力测试模拟极端市场情景(如金融危机)对投资组合的影响。
Backtesting回测用历史数据验证风险模型(如 VaR)的准确性。
Monte Carlo Simulation蒙特卡洛模拟通过随机生成路径模拟未来市场情景(用于复杂衍生品定价和风险管理)。
Historical Simulation历史模拟法基于历史数据计算风险指标(如 VaR)。
Volatility Clustering波动率聚集金融时间序列中高波动率常伴随高波动率的现象(GARCH 模型捕捉此特性)。

数据科学-优化、启发式和模拟

· 2 min read
  • 启发式--一种实际解决问题的方法,不能保证最优,但足以达到直接目标。
  • 贪婪算法(Greedy Algorithm)--一种遵循启发式的算法,在每个阶段做出局部最优选择,希望找到全局最优。
  • 旅行推销员问题 (Traveling Salesman Problem, TSP)- 一个经典的计算机科学优化问题,涉及寻找访问列表中每个城市一次的最短路线。
  • 仿真--用数学模型模仿现实世界中一段时间内的过程,以研究系统行为和性能。
  • 大数法则- 概率模拟中样本量越大,越能揭示真实的基本统计分布的原理。
  • 实验跟踪- MLOps 跟踪机器学习实验迭代中性能等关键指标的实践。