Python面试问题整理[快速排序、copy和deep copy]

本文详细介绍了快速排序算法的实现原理及Python中深拷贝与浅拷贝的区别,通过具体代码示例展示了如何进行数据排序,并深入探讨了不同拷贝方式对对象的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法

  • 快速排序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: Yang hengyu
# date: 2018-07-31


def quick_sort(list_in):
    if not isinstance(list_in, list):
        return u'参数错误'
    if len(list_in) <= 1:
        return list_in

    list_a = []
    list_b = []
    # 标志元素
    mark_num = list_in.pop()

    for num in list_in:
        if num < mark_num:
            list_a.append(num)
        else:
            list_b.append(num)

    return quick_sort(list_a) + [mark_num] + quick_sort(list_b)

if __name__ == '__main__':
    a = [3, 45, 5, 3, 2, 8, 9, 52, 5]
    print quick_sort(a)

基础

  • copy和deepcopy区别
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: Yang hengyu
# date: 2018-07-31

import copy

a = [1, 2, 3]
b = [1, 2, [1, 2, 3]]

aa = copy.copy(a)
bb = copy.copy(b)
deep_aa = copy.deepcopy(a)
deep_bb = copy.deepcopy(b)

a[0] = '1'
b[2][0] = '2'

print aa, bb
print deep_aa, deep_bb

# 打印结果:
[1, 2, 3] [1, 2, ['2', 2, 3]]
[1, 2, 3] [1, 2, [1, 2, 3]]

copy只会复制一层;deepcopy会对每一层(嵌套)都复制,此时deepcopy出来的对象已经不是原来的对象了,虽然实际上会共享不可变的子对象,但不影响它们的相互独立性;
当最外层对象为可变类型时,copy后得到的对象指向新的内存空间,当最外层的对象为不可变类型时,copy后得到的对象指向原对象的内存空间。
赋值:简单地拷贝对象的引用,两个对象的id相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值