|
490 | 490 | "#### Example 2-7. Tuples used as records" |
491 | 491 | ] |
492 | 492 | }, |
| 493 | + { |
| 494 | + "cell_type": "markdown", |
| 495 | + "metadata": {}, |
| 496 | + "source": [ |
| 497 | + "`tuple` 只能接一個引數,並且**可以排序**" |
| 498 | + ] |
| 499 | + }, |
493 | 500 | { |
494 | 501 | "cell_type": "code", |
495 | | - "execution_count": 14, |
| 502 | + "execution_count": 13, |
| 503 | + "metadata": {}, |
| 504 | + "outputs": [ |
| 505 | + { |
| 506 | + "name": "stdout", |
| 507 | + "output_type": "stream", |
| 508 | + "text": [ |
| 509 | + "TypeError: tuple expected at most 1 argument, got 2\n", |
| 510 | + "AttributeError: 'tuple' object has no attribute 'sort'\n", |
| 511 | + "[-118.408056, 33.9425]\n" |
| 512 | + ] |
| 513 | + } |
| 514 | + ], |
| 515 | + "source": [ |
| 516 | + "try:\n", |
| 517 | + " lax_coordinates = tuple(33.9425, -118.408056)\n", |
| 518 | + "except TypeError: \n", |
| 519 | + " print(\"TypeError: tuple expected at most 1 argument, got 2\")\n", |
| 520 | + "\n", |
| 521 | + "lax_coordinates = tuple((33.9425, -118.408056))\n", |
| 522 | + "try:\n", |
| 523 | + " lax_coordinates.sort()\n", |
| 524 | + "except AttributeError:\n", |
| 525 | + " print(\"AttributeError: 'tuple' object has no attribute 'sort'\")\n", |
| 526 | + "print(sorted(lax_coordinates))" |
| 527 | + ] |
| 528 | + }, |
| 529 | + { |
| 530 | + "cell_type": "code", |
| 531 | + "execution_count": 6, |
496 | 532 | "metadata": { |
497 | 533 | "collapsed": false, |
498 | 534 | "pycharm": { |
|
504 | 540 | "name": "stdout", |
505 | 541 | "output_type": "stream", |
506 | 542 | "text": [ |
| 543 | + "<class 'tuple'>\n", |
507 | 544 | "BRA/CE342567\n", |
508 | 545 | "ESP/XDA205856\n", |
509 | 546 | "USA/31195855\n" |
|
512 | 549 | ], |
513 | 550 | "source": [ |
514 | 551 | "lax_coordinates = (33.9425, -118.408056)\n", |
| 552 | + "print(type(lax_coordinates))\n", |
| 553 | + "\n", |
515 | 554 | "city, year, pop, chg, area = ('Tokyo', 2003, 32_450, 0.66, 8014)\n", |
516 | 555 | "traveler_ids = [('USA', '31195855'), ('BRA', 'CE342567'), ('ESP', 'XDA205856')]\n", |
517 | 556 | "\n", |
|
521 | 560 | }, |
522 | 561 | { |
523 | 562 | "cell_type": "code", |
524 | | - "execution_count": 15, |
| 563 | + "execution_count": 2, |
525 | 564 | "metadata": { |
526 | 565 | "collapsed": false, |
527 | 566 | "pycharm": { |
|
558 | 597 | }, |
559 | 598 | { |
560 | 599 | "cell_type": "code", |
561 | | - "execution_count": 16, |
| 600 | + "execution_count": 7, |
562 | 601 | "metadata": { |
563 | 602 | "collapsed": false, |
564 | 603 | "pycharm": { |
|
572 | 611 | "True" |
573 | 612 | ] |
574 | 613 | }, |
575 | | - "execution_count": 16, |
| 614 | + "execution_count": 7, |
576 | 615 | "metadata": {}, |
577 | 616 | "output_type": "execute_result" |
578 | 617 | } |
|
585 | 624 | }, |
586 | 625 | { |
587 | 626 | "cell_type": "code", |
588 | | - "execution_count": 17, |
| 627 | + "execution_count": 8, |
589 | 628 | "metadata": { |
590 | 629 | "collapsed": false, |
591 | 630 | "pycharm": { |
|
599 | 638 | "False" |
600 | 639 | ] |
601 | 640 | }, |
602 | | - "execution_count": 17, |
| 641 | + "execution_count": 8, |
603 | 642 | "metadata": {}, |
604 | 643 | "output_type": "execute_result" |
605 | 644 | } |
|
611 | 650 | }, |
612 | 651 | { |
613 | 652 | "cell_type": "code", |
614 | | - "execution_count": 18, |
| 653 | + "execution_count": 9, |
615 | 654 | "metadata": { |
616 | 655 | "collapsed": false, |
617 | 656 | "pycharm": { |
|
625 | 664 | "(10, 'alpha', [1, 2, 99])" |
626 | 665 | ] |
627 | 666 | }, |
628 | | - "execution_count": 18, |
| 667 | + "execution_count": 9, |
629 | 668 | "metadata": {}, |
630 | 669 | "output_type": "execute_result" |
631 | 670 | } |
|
636 | 675 | }, |
637 | 676 | { |
638 | 677 | "cell_type": "code", |
639 | | - "execution_count": 19, |
| 678 | + "execution_count": 10, |
640 | 679 | "metadata": { |
641 | 680 | "collapsed": false, |
642 | 681 | "pycharm": { |
|
650 | 689 | "True" |
651 | 690 | ] |
652 | 691 | }, |
653 | | - "execution_count": 19, |
| 692 | + "execution_count": 10, |
654 | 693 | "metadata": {}, |
655 | 694 | "output_type": "execute_result" |
656 | 695 | } |
|
671 | 710 | }, |
672 | 711 | { |
673 | 712 | "cell_type": "code", |
674 | | - "execution_count": 20, |
| 713 | + "execution_count": 11, |
675 | 714 | "metadata": { |
676 | 715 | "collapsed": false, |
677 | 716 | "pycharm": { |
|
685 | 724 | "False" |
686 | 725 | ] |
687 | 726 | }, |
688 | | - "execution_count": 20, |
| 727 | + "execution_count": 11, |
689 | 728 | "metadata": {}, |
690 | 729 | "output_type": "execute_result" |
691 | 730 | } |
|
694 | 733 | "fixed(tm)" |
695 | 734 | ] |
696 | 735 | }, |
| 736 | + { |
| 737 | + "cell_type": "markdown", |
| 738 | + "metadata": {}, |
| 739 | + "source": [ |
| 740 | + "`tuple` 可以相加串接" |
| 741 | + ] |
| 742 | + }, |
| 743 | + { |
| 744 | + "cell_type": "code", |
| 745 | + "execution_count": null, |
| 746 | + "metadata": {}, |
| 747 | + "outputs": [ |
| 748 | + { |
| 749 | + "data": { |
| 750 | + "text/plain": [ |
| 751 | + "(10, 'alpha', (1, 2), 10, 'alpha', [1, 2])" |
| 752 | + ] |
| 753 | + }, |
| 754 | + "execution_count": 15, |
| 755 | + "metadata": {}, |
| 756 | + "output_type": "execute_result" |
| 757 | + } |
| 758 | + ], |
| 759 | + "source": [ |
| 760 | + "tf + tm" |
| 761 | + ] |
| 762 | + }, |
| 763 | + { |
| 764 | + "cell_type": "markdown", |
| 765 | + "metadata": {}, |
| 766 | + "source": [ |
| 767 | + "`tuple` **不能使用** `tuple.copy()`\n", |
| 768 | + "- `copy.copy()`(淺拷貝, shallow copy)\n", |
| 769 | + " - 只複製最外層的容器物件,裡面的巢狀物件(例如 list 裡的 list)只是參考(reference)。\n", |
| 770 | + " - 也就是說,內層的資料仍指向原本的記憶體位置,兩者共享。 \n", |
| 771 | + "- `copy.deepcopy()`(深拷貝, deep copy)\n", |
| 772 | + " - 遞迴地複製所有巢狀物件。\n", |
| 773 | + " - 原物件與拷貝物件完全獨立,改其中一個不會影響另一個。\n", |
| 774 | + "\n", |
| 775 | + "| 功能 | `copy.copy()`(淺拷貝) | `copy.deepcopy()`(深拷貝) |\n", |
| 776 | + "| -------- | ------------------ | ---------------------- |\n", |
| 777 | + "| 複製外層 | ✅ | ✅ |\n", |
| 778 | + "| 複製內層巢狀物件 | ❌(參照原物件) | ✅(新建物件) |\n", |
| 779 | + "| 速度與效能 | 較快 | 較慢(因為遞迴複製) |\n" |
| 780 | + ] |
| 781 | + }, |
| 782 | + { |
| 783 | + "cell_type": "code", |
| 784 | + "execution_count": null, |
| 785 | + "metadata": {}, |
| 786 | + "outputs": [ |
| 787 | + { |
| 788 | + "name": "stdout", |
| 789 | + "output_type": "stream", |
| 790 | + "text": [ |
| 791 | + "'tuple' object has no attribute 'copy'\n", |
| 792 | + "tf_copy = (10, 'alpha', (1, 2))\n", |
| 793 | + "tf_deepcopy = (10, 'alpha', (1, 2))\n" |
| 794 | + ] |
| 795 | + } |
| 796 | + ], |
| 797 | + "source": [ |
| 798 | + "try:\n", |
| 799 | + " tf_copy = tf.copy()\n", |
| 800 | + "except AttributeError: \n", |
| 801 | + " print(\"'tuple' object has no attribute 'copy'\")\n", |
| 802 | + "\n", |
| 803 | + "from copy import copy, deepcopy\n", |
| 804 | + "\n", |
| 805 | + "tf_copy = copy(tf)\n", |
| 806 | + "print(f\"tf_copy = {tf_copy}\")\n", |
| 807 | + "tf_deepcopy = deepcopy(tf)\n", |
| 808 | + "print(f\"tf_deepcopy = {tf_deepcopy}\")" |
| 809 | + ] |
| 810 | + }, |
697 | 811 | { |
698 | 812 | "cell_type": "markdown", |
699 | 813 | "metadata": { |
|
0 commit comments