-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpythonshu-zu-fu-zhi-de-xian-jing.html
109 lines (101 loc) · 4.62 KB
/
pythonshu-zu-fu-zhi-de-xian-jing.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>Python数组复制的陷阱</title>
<link rel="stylesheet" href="https://sillyemperor.github.io/theme/css/main.css" />
<link href="https://sillyemperor.github.io/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="841BC Atom Feed" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://sillyemperor.github.io/">841BC </a></h1>
<nav><ul>
<li><a href="https://sillyemperor.github.io/category/gis.html">GIS</a></li>
<li><a href="https://sillyemperor.github.io/category/java.html">Java</a></li>
<li><a href="https://sillyemperor.github.io/category/jin-rong.html">金融</a></li>
<li><a href="https://sillyemperor.github.io/category/linux.html">Linux</a></li>
<li><a href="https://sillyemperor.github.io/category/neural-network.html">Neural Network</a></li>
<li><a href="https://sillyemperor.github.io/category/nginx.html">Nginx</a></li>
<li class="active"><a href="https://sillyemperor.github.io/category/python.html">Python</a></li>
</ul></nav>
</header><!-- /#banner -->
<section id="content" class="body">
<article>
<header>
<h1 class="entry-title">
<a href="https://sillyemperor.github.io/pythonshu-zu-fu-zhi-de-xian-jing.html" rel="bookmark"
title="Permalink to Python数组复制的陷阱">Python数组复制的陷阱</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2019-06-04T00:00:00+02:00">
Published: Tue 04 June 2019
</abbr>
<address class="vcard author">
By <a class="url fn" href="https://sillyemperor.github.io/author/wang-jiang.html">Wang Jiang</a>
</address>
<p>In <a href="https://sillyemperor.github.io/category/python.html">Python</a>.</p>
<p>tags: <a href="https://sillyemperor.github.io/tag/python.html">Python</a> </p>
</footer><!-- /.post-info --> <p>说是陷阱其实有点标题党,其实是最近的一次DEBUG结果。先看代码:</p>
<blockquote>
<blockquote>
<p>a=[1]*5</p>
</blockquote>
</blockquote>
<p>[1,1,1,1,1]</p>
<blockquote>
<blockquote>
<p>a[0]=2</p>
</blockquote>
</blockquote>
<p>[2,1,1,1,1]</p>
<p>这段代码的含义是复制了5个‘1’作为数组,修改其中一个元素后的结果。没毛病。但是:</p>
<blockquote>
<blockquote>
<p>b=[[1]<em>2]</em>2</p>
</blockquote>
</blockquote>
<p>[[1,1],[1,1]]</p>
<blockquote>
<blockquote>
<p>b[0][0]=2</p>
</blockquote>
</blockquote>
<p>[[2,1],[2,1]]</p>
<p>WTF!这显然不是我们想要的结果。其实问题也很简单,[object]*n=[object,object,...object],也就是说复制的是对象的引用而不是值复制。例如:</p>
<blockquote>
<blockquote>
<p>o=object()</p>
<p>[o]*2</p>
</blockquote>
</blockquote>
<p>[<object object at 0x1083a7090>, <object object at 0x1083a7090>]</p>
<p>可以看到,其实是同一个对象。</p>
</div><!-- /.entry-content -->
</article>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>links</h2>
<ul>
<li><a href="http://getpelican.com/">Pelican</a></li>
<li><a href="http://python.org/">Python.org</a></li>
<li><a href="http://jinja.pocoo.org/">Jinja2</a></li>
<li><a href="#">You can modify those links in your config file</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://sillyemperor.github.io/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
<p>The theme is by <a href="http://coding.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a>, thanks!</p>
</footer><!-- /#contentinfo -->
</body>
</html>