Python使用引用而不是值赋值

时间:2014-08-12 12:31:26

标签: python reference

看看这段代码:

__fields = {2: '_id', 4: 'link_grabber_id', 8: 'last_read', 16: 'change_selector', 32: 'image_selector',
                64: 'link_selector', 128: 'country_id', 256: 'language_id', 512: 'news_agency_id', 1024: 'etag',
                2048: 'last_size', 4096: 'added_by', 8192: 'watermark_text', 16384: 'redirect_status',
                32768: 'rss_desc', 65536: 'last_modified', 131072: 'link', 262144: 'run_time', 524288: 'content_type',
                1048576: 'category_id', 2097152: 'enabled', 4194304: 'halt_count', 8388608: 'added_on'}

def x(criteria={}, f=0):
    f = 9
    print '2', criteria
    #var = criteria.copy()
    var = criteria

    print 'var', var
    for k, v in var.items():
                var.update({__fields[k]: v})
                del var[k]
    print '3', criteria, var

ccc = {1048576: 54}
print '1', ccc
w = 0
x(ccc, w)
print '4', ccc, w

如果我使用var = criteria代替var = criteria.copy() var,则包含对更改条件后更改的条件的引用。为什么它是一个参考?当python使用引用而不是值赋值?

1 个答案:

答案 0 :(得分:-2)

Python 始终使用值赋值。问题是dict值是容器类型,并且不会在每个赋值时生成新副本。