python函数对于列表,字典等结构为什么要默认传址?
高洛峰
高洛峰 2017-04-17 16:35:12
[Python讨论组]

我很费解这一点,php写多了,今天准备用python写算法题,因为人家没提供php编译器。
折腾了几个小时,也没会玩儿这字典列表和函数传址是怎么回事。

def my_cazz(n,l):
    temp = n;
    count = 0;
    l.append(n);
    while (n!=1):
        if (n % 2 == 0):
            n = int(n/2);
        else:
            n = int((3 * n + 1) / 2);
        count = count + 1;
        l.append(n);

# def cmp_list(l1,l2):
#     li[0]

# n = int(raw_input());
# myinput = raw_input();
myinput = "2 3 4 5 6 7 8 10 12 14 15 16 17 18";

mylist = myinput.split(' ');

count = 0;
dic = {};
li = [];
for x in mylist:
    dic[int(x)] = li;
    my_cazz(int(x),dic[int(x)]);

for k in dic:
    print dic[k];
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
PHP中文网

没看懂你代码具体要表达什么,我就按照你的题目回答。
并不是Python中的函数对于列表和字典默认传址,而是函数接收的参数都默认传引用,也就是说的传址。
参数变量在函数的作用域里面是不同于外部的变量,虽然一开始它们都引用了同样的对象。
对于对象来说,分为可变对象和不可变对象,一个变量引用了不可变对象,又要改变其值的话,其实就是改变了引用,因为其引用的对象不可变。所以当传递给函数的参数是不可变对象的话,在函数内修改该参数变量,会导致参数变量改变了引用,而对于可变对象就不会有这个问题,这样就使得看起来像c语言中函数传值和传址。

巴扎黑

当字典长度过大时,数值的拷贝会耗费大量时间

怪我咯

这些都是很大一坨,copy过去会很郁闷的(房子从来给地址,不会把房子运到你面前的)

相反,传个地址过去就好了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号