{"nbformat": 3, "worksheets": [{"cells": [{"metadata": {}, "source": ["Define and reference a variable:"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 22, "input": ["a = 3*2 + 5"], "outputs": [], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 23, "input": ["a"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 23, "text": ["11"]}], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 24, "input": ["a = \"interesting\"*3"], "outputs": [], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 25, "input": ["a"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 25, "text": ["'interestinginterestinginteresting'"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["No type declaration needed!\n", "\n", "(But values still have types--let's check.)"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 26, "input": ["type(a)"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 26, "text": ["str"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["Python variables are like *pointers*.\n", "\n", "(if that word makes sense)"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 27, "input": ["a = [1,2,3]"], "outputs": [], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 28, "input": ["b = a"], "outputs": [], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 29, "input": ["b.append(4)"], "outputs": [], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 30, "input": ["b"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 30, "text": ["[1, 2, 3, 4]"]}], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 31, "input": ["a"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 31, "text": ["[1, 2, 3, 4]"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["You can see this pointer with `id()`."], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 33, "input": ["print(id(a), id(b))"], "outputs": [{"output_type": "stream", "stream": "stdout", "text": ["140441837907336 140441837907336\n"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["The `is` operator tests for object sameness."], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 34, "input": ["a is b"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 34, "text": ["True"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["This is a **stronger** condition than being equal!"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 36, "input": ["a = [1,2,3]\n", "b = [1,2,3]\n", "print(\"IS \", a is b)\n", "print(\"EQUAL\", a == b)"], "outputs": [{"output_type": "stream", "stream": "stdout", "text": ["IS False\n", "EQUAL True\n"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["What do you think the following prints?"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 38, "input": ["a = [1,2,3]\n", "b = a\n", "a = a + [4]\n", "print(b)"], "outputs": [{"output_type": "stream", "stream": "stdout", "text": ["[1, 2, 3]\n"]}], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 39, "input": ["a is b"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 39, "text": ["False"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["Why is that?"], "cell_type": "markdown"}, {"metadata": {}, "source": ["-----\n", "How could this lead to bugs?"], "cell_type": "markdown"}, {"metadata": {}, "source": ["----------\n", "* To help manage this risk, Python provides **immutable** types.\n", "\n", "* Immutable types cannot be changed in-place, only by creating a new object.\n", "\n", "* A `tuple` is an immutable `list`."], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 40, "input": ["a = [1,2,3]\n", "type(a)"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 40, "text": ["list"]}], "language": "python", "cell_type": "code"}, {"collapsed": false, "metadata": {}, "prompt_number": 41, "input": ["a = (1,2,3)\n", "type(a)"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 41, "text": ["tuple"]}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["Let's try to change that tuple."], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 42, "input": ["a[2] = 0"], "outputs": [{"output_type": "pyerr", "traceback": ["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment"], "ename": "TypeError", "evalue": "'tuple' object does not support item assignment"}], "language": "python", "cell_type": "code"}, {"metadata": {}, "source": ["*Bonus question:* How do you spell a single-element tuple?"], "cell_type": "markdown"}, {"collapsed": false, "metadata": {}, "prompt_number": 43, "input": ["a = (3,)\n", "type(a)"], "outputs": [{"output_type": "pyout", "metadata": {}, "prompt_number": 43, "text": ["tuple"]}], "language": "python", "cell_type": "code"}], "metadata": {}}], "metadata": {"name": "", "signature": "sha256:61d7bfca2734ef4b6da44493f9985b5dbaa82a70845c456cc5605c2d7e2a9a09"}, "nbformat_minor": 0}