Skip to content

Commit 27a7102

Browse files
committed
improve explanation of comparing objects values and references using == and is
1 parent 1092333 commit 27a7102

2 files changed

Lines changed: 111 additions & 26 deletions

File tree

python_basic_2_1.ipynb

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@
100100
{
101101
"cell_type": "code",
102102
"execution_count": null,
103-
"metadata": {},
103+
"metadata": {
104+
"collapsed": true
105+
},
104106
"outputs": [],
105107
"source": [
106108
"x = -3\n",
@@ -160,7 +162,9 @@
160162
{
161163
"cell_type": "code",
162164
"execution_count": null,
163-
"metadata": {},
165+
"metadata": {
166+
"collapsed": true
167+
},
164168
"outputs": [],
165169
"source": [
166170
"gene = \"BRCA2\"\n",
@@ -187,7 +191,9 @@
187191
{
188192
"cell_type": "code",
189193
"execution_count": null,
190-
"metadata": {},
194+
"metadata": {
195+
"collapsed": true
196+
},
191197
"outputs": [],
192198
"source": [
193199
"x = 11\n",
@@ -231,7 +237,9 @@
231237
{
232238
"cell_type": "code",
233239
"execution_count": null,
234-
"metadata": {},
240+
"metadata": {
241+
"collapsed": true
242+
},
235243
"outputs": [],
236244
"source": [
237245
"x = -5\n",
@@ -247,9 +255,36 @@
247255
"cell_type": "markdown",
248256
"metadata": {},
249257
"source": [
250-
"Python has two additional comparison operators <tt>is</tt> and <tt>is not</tt>. These compare whether two objects are the same object, whereas <tt>==</tt> and <tt>!=</tt> compare whether values are the same.\n",
258+
"Python has two additional comparison operators <tt>is</tt> and <tt>is not</tt>.\n",
259+
"\n",
260+
"These compare whether two objects are the same object, whereas <tt>==</tt> and <tt>!=</tt> compare whether values are the same.\n",
261+
"\n",
262+
"There is a simple rule of thumb to tell when to use `==` or `is`:\n",
263+
"- `==` is for **value** equality. Use it to check if two objects have the same value.\n",
264+
"- `is` is for **reference** equality. Use it to check if two references refer to the same object.\n",
251265
"\n",
252-
"As an example in Python:"
266+
"*Something to note*, you will get unexpected and inconsistent results if you mistakenly use `is` to compare for reference equality on integers:"
267+
]
268+
},
269+
{
270+
"cell_type": "code",
271+
"execution_count": null,
272+
"metadata": {},
273+
"outputs": [],
274+
"source": [
275+
"a = 500\n",
276+
"b = 500\n",
277+
"print(a == b) # True\n",
278+
"print(a is b) # False"
279+
]
280+
},
281+
{
282+
"cell_type": "markdown",
283+
"metadata": {},
284+
"source": [
285+
"Another example with lists `x`, `y`, and `z`:\n",
286+
"- `y` being a copy of `x`\n",
287+
"- and `z` being another reference to the same object as `x`"
253288
]
254289
},
255290
{
@@ -262,13 +297,25 @@
262297
"y = x[:] # y is a copy of x\n",
263298
"z = x\n",
264299
"print(x)\n",
300+
"print(y)\n",
301+
"print(z)\n",
265302
"print(\"Are values of y and x the same?\", y == x)\n",
266303
"print(\"Are objects y and x the same?\", y is x)\n",
267304
"print(\"Are values of z and x the same?\", z == x)\n",
268-
"print(\"Are objects z and x the same?\", z is x)\n",
305+
"print(\"Are objects z and x the same?\", z is x)"
306+
]
307+
},
308+
{
309+
"cell_type": "code",
310+
"execution_count": null,
311+
"metadata": {},
312+
"outputs": [],
313+
"source": [
269314
"# Let's change x\n",
270315
"x[1] = 23\n",
271316
"print(x)\n",
317+
"print(y)\n",
318+
"print(z)\n",
272319
"print(\"Are values of y and x the same?\", y == x)\n",
273320
"print(\"Are objects y and x the same?\", y is x)\n",
274321
"print(\"Are values of z and x the same?\", z == x)\n",
@@ -299,7 +346,9 @@
299346
{
300347
"cell_type": "code",
301348
"execution_count": null,
302-
"metadata": {},
349+
"metadata": {
350+
"collapsed": true
351+
},
303352
"outputs": [],
304353
"source": [
305354
"x = '' # An empty string\n",

python_basic_2_2.ipynb

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@
5252
{
5353
"cell_type": "code",
5454
"execution_count": null,
55-
"metadata": {},
55+
"metadata": {
56+
"collapsed": true
57+
},
5658
"outputs": [],
5759
"source": [
5860
"codeList = ['NA06984', 'NA06985', 'NA06986', 'NA06989', 'NA06991']\n",
@@ -71,7 +73,9 @@
7173
{
7274
"cell_type": "code",
7375
"execution_count": null,
74-
"metadata": {},
76+
"metadata": {
77+
"collapsed": true
78+
},
7579
"outputs": [],
7680
"source": [
7781
"dnaSequence = 'ATGGTGTTGCC'\n",
@@ -90,7 +94,9 @@
9094
{
9195
"cell_type": "code",
9296
"execution_count": null,
93-
"metadata": {},
97+
"metadata": {
98+
"collapsed": true
99+
},
94100
"outputs": [],
95101
"source": [
96102
"rnaMassDict = {\"G\":345.21, \"C\":305.18, \"A\":329.21, \"U\":302.16}\n",
@@ -109,7 +115,9 @@
109115
{
110116
"cell_type": "code",
111117
"execution_count": null,
112-
"metadata": {},
118+
"metadata": {
119+
"collapsed": true
120+
},
113121
"outputs": [],
114122
"source": [
115123
"total = 0\n",
@@ -133,7 +141,9 @@
133141
{
134142
"cell_type": "code",
135143
"execution_count": null,
136-
"metadata": {},
144+
"metadata": {
145+
"collapsed": true
146+
},
137147
"outputs": [],
138148
"source": [
139149
"geneExpression = {\n",
@@ -184,7 +194,9 @@
184194
{
185195
"cell_type": "code",
186196
"execution_count": null,
187-
"metadata": {},
197+
"metadata": {
198+
"collapsed": true
199+
},
188200
"outputs": [],
189201
"source": [
190202
"value = 0.25\n",
@@ -229,7 +241,9 @@
229241
{
230242
"cell_type": "code",
231243
"execution_count": null,
232-
"metadata": {},
244+
"metadata": {
245+
"collapsed": true
246+
},
233247
"outputs": [],
234248
"source": [
235249
"values = [10, -5, 3, -1, 7]\n",
@@ -253,7 +267,9 @@
253267
{
254268
"cell_type": "code",
255269
"execution_count": null,
256-
"metadata": {},
270+
"metadata": {
271+
"collapsed": true
272+
},
257273
"outputs": [],
258274
"source": [
259275
"geneticCode = {'TAT': 'Tyrosine', 'TAC': 'Tyrosine',\n",
@@ -316,7 +332,9 @@
316332
{
317333
"cell_type": "code",
318334
"execution_count": null,
319-
"metadata": {},
335+
"metadata": {
336+
"collapsed": true
337+
},
320338
"outputs": [],
321339
"source": [
322340
"print(list(range(10)))\n",
@@ -338,7 +356,9 @@
338356
{
339357
"cell_type": "code",
340358
"execution_count": null,
341-
"metadata": {},
359+
"metadata": {
360+
"collapsed": true
361+
},
342362
"outputs": [],
343363
"source": [
344364
"for x in range(8):\n",
@@ -348,7 +368,9 @@
348368
{
349369
"cell_type": "code",
350370
"execution_count": null,
351-
"metadata": {},
371+
"metadata": {
372+
"collapsed": true
373+
},
352374
"outputs": [],
353375
"source": [
354376
"squares = []\n",
@@ -376,7 +398,9 @@
376398
{
377399
"cell_type": "code",
378400
"execution_count": null,
379-
"metadata": {},
401+
"metadata": {
402+
"collapsed": true
403+
},
380404
"outputs": [],
381405
"source": [
382406
"letters = ['A','C','G','T']\n",
@@ -387,7 +411,9 @@
387411
{
388412
"cell_type": "code",
389413
"execution_count": null,
390-
"metadata": {},
414+
"metadata": {
415+
"collapsed": true
416+
},
391417
"outputs": [],
392418
"source": [
393419
"numbered_letters = list(enumerate(letters))\n",
@@ -404,7 +430,9 @@
404430
{
405431
"cell_type": "code",
406432
"execution_count": null,
407-
"metadata": {},
433+
"metadata": {
434+
"collapsed": true
435+
},
408436
"outputs": [],
409437
"source": [
410438
"city_pops = {\n",
@@ -425,7 +453,9 @@
425453
{
426454
"cell_type": "code",
427455
"execution_count": null,
428-
"metadata": {},
456+
"metadata": {
457+
"collapsed": true
458+
},
429459
"outputs": [],
430460
"source": [
431461
"total = 0\n",
@@ -437,7 +467,9 @@
437467
{
438468
"cell_type": "code",
439469
"execution_count": null,
440-
"metadata": {},
470+
"metadata": {
471+
"collapsed": true
472+
},
441473
"outputs": [],
442474
"source": [
443475
"pops = list(city_pops.values())\n",
@@ -464,7 +496,9 @@
464496
{
465497
"cell_type": "code",
466498
"execution_count": null,
467-
"metadata": {},
499+
"metadata": {
500+
"collapsed": true
501+
},
468502
"outputs": [],
469503
"source": [
470504
"print('{:.2f}'.format(0.4567))"
@@ -473,7 +507,9 @@
473507
{
474508
"cell_type": "code",
475509
"execution_count": null,
476-
"metadata": {},
510+
"metadata": {
511+
"collapsed": true
512+
},
477513
"outputs": [],
478514
"source": [
479515
"geneExpression = {\n",

0 commit comments

Comments
 (0)