看看这段代码:
__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使用引用而不是值赋值?
答案 0 :(得分:-2)
Python 始终使用值赋值。问题是dict值是容器类型,并且不会在每个赋值时生成新副本。