{"id":25066,"date":"2020-02-25T12:15:10","date_gmt":"2020-02-25T10:15:10","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=25066"},"modified":"2020-06-23T14:55:45","modified_gmt":"2020-06-23T11:55:45","slug":"how-to-compare-strings-in-python-equality-and-identity","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/","title":{"rendered":"How to Compare Strings in Python: Equality and Identity"},"content":{"rendered":"\n<p>Once again, we\u2019re back with another Python topic. Today, we\u2019ll talk about how to compare strings in Python. Typically, I try to stay away from strings because they have a lot of complexity (e.g. different languages, implementations, etc.). That said, I decided to take a risk with this one. Hope you like it!<\/p>\n\n\n\n<p>As a bit of a teaser, here\u2019s what you can expect in this article. We\u2019ll be looking at a few different comparison operators in Python including <code>==<\/code>, <code>&lt;<\/code>, <code>&lt;=<\/code>, <code>&gt;=<\/code>, and <code>&gt;<\/code> as well as <code>is<\/code>. In addition, we\u2019ll talk about how these operators can be used to compare strings and when to use them. If you want to know more, you\u2019ll have to keep reading.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problem Description<\/h2>\n\n\n\n<p>Let\u2019s imagine we\u2019re building up a simple search engine. For example, we have a bunch of files with text in them, and we want to be able search through those documents for certain keywords. How would we do that?<\/p>\n\n\n\n<p>At the core of this search engine, we\u2019ll have to compare strings. For instance, if we search our system for something about the Pittsburgh Penguins (say, Sidney Crosby), we\u2019ll have to look for documents that contain our keyword. Of course, how do we know whether or not we have a match?<\/p>\n\n\n\n<p>Specifically, we want to know how we can compare two strings for equality. For example, is \u201cSidney Crosby\u201d the same as \u201cSidney Crosby\u201d? How about \u201csidney crosby\u201d? Or even \u201cSiDnEy CrOsBy\u201d? In other words, what constitutes equality in Python?<\/p>\n\n\n\n<p>Of course, equality isn\u2019t the only way to compare strings. For example, how can we compare strings alphabetically\/lexicographically? Does \u201cMalkin\u201d come before or after \u201cLetang\u201d in a list?<\/p>\n\n\n\n<p>If any of these topics sound interesting, you\u2019re in luck. We\u2019ll cover all them and more in this article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Solutions<\/h2>\n\n\n\n<p>In this section, we\u2019ll take a look at a few different ways to compare strings. First, we\u2019ll look at a brute force solution which involves looping over each character to check for matches. Then, we\u2019ll introduce the comparison operators which abstract away the brute force solution. Finally, we\u2019ll talk about identity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compare Strings by Brute Force<\/h3>\n\n\n\n<p>Since strings are iterables, there\u2019s nothing really stopping us from writing a loop to compare each character:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_347730\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">is_same_player = True<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">for<\/code> <code class=\"java plain\">a, b in zip(penguins_87, penguins_71):<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java keyword\">if<\/code> <code class=\"java plain\">a != b:<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">is_same_player = False<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">break<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>In this example, we zip both strings and loop over each pair of characters until we don\u2019t find a match. If we break before we\u2019re finished, we know we don\u2019t have a match. Otherwise, our strings are \u201cidentical.\u201d<\/p>\n\n\n\n<p>While this gets the job done for some strings, it might fail in certain scenarios. For example, what happens if one of the strings is longer than the other?<\/p>\n\n\n\n<div>\n<div id=\"highlighter_339979\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_59 = <\/code><code class=\"java string\">\"Guentzel\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>As it turns out, <code>zip()<\/code> will actually truncate the longer string. To deal with that, we might consider doing a length check first:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_48786\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_59 = <\/code><code class=\"java string\">\"Guentzel\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">is_same_player = len(penguins_87) == len(penguins_59)<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">if<\/code> <code class=\"java plain\">is_same_player:<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">a, b in zip(penguins_87, penguins_59):<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">if<\/code> <code class=\"java plain\">a != b:<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">is_same_player = False<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">break<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Of course, even with the extra check, this solution is a bit overkill and likely error prone. In addition, this solution only works for equality. How do we check if a string is \u201cless\u201d than another lexicographically? Luckily, there are other solutions below.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compare Strings by Comparison Operators<\/h3>\n\n\n\n<p>Fun fact: we don\u2019t have to write our own string equality code to compare strings. As it turns out, there are several core operators that work with strings right out of the box: <code>==<\/code>, <code>&lt;<\/code>, <code>&lt;=<\/code>, <code>&gt;=<\/code>, <code>&gt;<\/code>.<\/p>\n\n\n\n<p>Using our Penguins players from above, we can try comparing them directly:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_53478\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_59 = <\/code><code class=\"java string\">\"Guentzel\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">penguins_87 == penguins_87&nbsp; # True<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">penguins_87 == penguins_71&nbsp; # False<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">penguins_87 &gt;= penguins_71&nbsp; # False<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">penguins_59 &lt;= penguins_71&nbsp; # True<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Now, it\u2019s important to note that these comparison operators work with the underlying ASCII representation of each character. As a result, seemingly equivalent strings might not appear to be the same:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_644242\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_87_small = <\/code><code class=\"java string\">\"crosby\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">penguins_87 == penguins_87_small&nbsp; # False<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>When we compare \u201cCrosby\u201d and \u201ccrosby\u201d, we get <code>False<\/code> because \u201cc\u201d and \u201cC\u201d aren\u2019t equivalent:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_32557\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">ord(<\/code><code class=\"java string\">'c'<\/code><code class=\"java plain\">)&nbsp; # <\/code><code class=\"java value\">99<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">ord(<\/code><code class=\"java string\">'C'<\/code><code class=\"java plain\">)&nbsp; # <\/code><code class=\"java value\">67<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Naturally, this can lead to some strange behavior. For example, we might say \u201ccrosby\u201d is less than \u201cMalkin\u201d because \u201ccrosby\u201d comes before \u201cMalkin\u201d alphabetically. Unfortunately, that\u2019s not how Python interprets that expression:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_775217\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87_small = <\/code><code class=\"java string\">\"crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">penguins_87_small &lt; penguins_71&nbsp; # False<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>In other words, while these comparison operators are convenient, they don\u2019t actually perform a case-insensitive comparison. Luckily, there are all sorts of tricks we can employ like converting both strings to uppercase or lowercase:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_623932\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87_small = <\/code><code class=\"java string\">\"crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">penguins_87_small.lower() &lt; penguins_71.lower()<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">penguins_87_small.upper() &lt; penguins_71.upper()<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Since strings in Python are immutable like most languages, these methods don\u2019t actually manipulate the underlying strings. Instead, the return new ones.<\/p>\n\n\n\n<p>All that said, strings are inherently complex. I say that has a bit of a warning because there are bound to be edge cases where the solutions in this article don\u2019t work as expected. After all, we\u2019ve only scratched the surface with ASCII characters. Try playing around with some strings that don\u2019t include English characters (e.g. \ud83e\udd10, \u6c49, etc.). You may be surprised by the results.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compare Strings by Identity<\/h3>\n\n\n\n<p>Before we move on, I felt like it was important to mention another way of comparing strings: identity. In Python, <code>==<\/code> isn\u2019t the only way to compare things; we can also use <code>is<\/code>. Take a look:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_878207\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_59 = <\/code><code class=\"java string\">\"Guentzel\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">penguins_87 is penguins_87&nbsp; # True<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">penguins_87 is penguins_71&nbsp; # False<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Here, it\u2019s tough to see any sort of difference between this solution and the previous one. After all, the output is the same. That said, there is a fundamental difference here. With equality (<code>==<\/code>), we compare the strings by their contents (i.e. letter by letter). With identity (<code>is<\/code>), we compare the strings by their location in memory (i.e address\/reference).<\/p>\n\n\n\n<p>To see this in action, let\u2019s create a few equivalent strings:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_781742\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_87_copy = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_87_clone = <\/code><code class=\"java string\">\"Cros\"<\/code> <code class=\"java plain\">+ <\/code><code class=\"java string\">\"by\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">penguins_8 = <\/code><code class=\"java string\">\"Cros\"<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">penguins_7 = <\/code><code class=\"java string\">\"by\"<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">penguins_87_dupe = penguins_8 + penguins_7<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">id(penguins_87)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # <\/code><code class=\"java value\">65564544<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">id(penguins_87_copy)&nbsp;&nbsp; # <\/code><code class=\"java value\">65564544<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java plain\">id(penguins_87_clone)&nbsp; # <\/code><code class=\"java value\">65564544<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java plain\">id(penguins_87_dupe)&nbsp;&nbsp; # <\/code><code class=\"java value\">65639392<\/code> <code class=\"java plain\">Uh Oh!<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>In the first three examples, the Python interpreter was able to tell that the constructed strings were the same, so the interpreter didn\u2019t bother making space for the two clones. Instead, it gave the latter two, <code>penguins_87_copy<\/code> and <code>penguins_87_clone<\/code>, the same ID. As a result, if we compare any of the first three strings with either <code>==<\/code> or <code>is<\/code>, we\u2019ll get the same result:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_615737\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 == penguins_87_copy == penguins_87_clone&nbsp; # True<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_87 is penguins_87_copy is penguins_87_clone&nbsp; # True<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>When we get to the last string, <code>penguins_87_dupe<\/code>, we run into a bit of an issue. As far as I can tell, the interpreter isn\u2019t able to know what the value of the expression is until runtime. As a result, it creates a new location for the resulting string\u2014despite the fact that \u201cCrosby\u201d already exists. If we modify our comparison chains from above, we\u2019ll see a different result:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_711188\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 == penguins_87_copy == penguins_87_clone == penguins_87_dupe # True<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_87 is penguins_87_copy is penguins_87_clone is penguins_87_dupe # False<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>The main takeaway here is to only use <code>==<\/code> when comparing strings for equality (an any object for that matter). After all, there\u2019s no guarantee that the Python interpreter is going to properly identify equivalent strings and give them the same ID. That said, if you need to compare two strings for identity, this is the way to go.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Challenge<\/h2>\n\n\n\n<p>Normally, I would check each solution for performance, but they\u2019re not all that similar. Instead, I figured we could jump right to the challenge.<\/p>\n\n\n\n<p>Now that we know how to compare strings in Python, I figured we could try using that knowledge to write a simple string sorting algorithm. For this challenge, you can assume ASCII strings and case sensitivity. However, you\u2019re free to optimize your solutions as needed. All I care about is the use of the operators discussed in this article.<\/p>\n\n\n\n<p>If you need a sample list to get started, here\u2019s the current forward roster for the Pittsburgh Penguins (reverse sorted alphabetically):<\/p>\n\n\n\n<div>\n<div id=\"highlighter_745811\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_2019_2020 = [<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Tanev'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Simon'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Rust'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'McCann'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Malkin'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Lafferty'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Kahun'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Hornqvist'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Guentzel'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Galchenyuk'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Di Pauli'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Crosby'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Blueger'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Blandisi'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Bjugstad'<\/code><code class=\"java plain\">, <\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java string\">'Aston-Reese'<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\">]<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>When you\u2019re finished, drop your solution in the comments below. Then, head on over to my article titled <a href=\"https:\/\/therenegadecoder.com\/code\/how-to-sort-a-list-of-strings-in-python\/\">How to Sort a List of Strings in Python<\/a> to see a few clever solutions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Little Recap<\/h2>\n\n\n\n<p>And with that, we\u2019re all done. Check out all the solutions here:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_351636\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">penguins_87 = <\/code><code class=\"java string\">\"Crosby\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">penguins_71 = <\/code><code class=\"java string\">\"Malkin\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">penguins_59 = <\/code><code class=\"java string\">\"Guentzel\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\"># Brute force comparison (equality only)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">is_same_player = len(penguins_87) == len(penguins_59)<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java keyword\">if<\/code> <code class=\"java plain\">is_same_player:<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">a, b in zip(penguins_87, penguins_59):<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">if<\/code> <code class=\"java plain\">a != b:<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">is_same_player = False<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">break<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java plain\"># Direct comparison<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java plain\">penguins_87 == penguins_59&nbsp; # False<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java plain\">penguins_87 &gt; penguins_59&nbsp; # False<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java plain\">penguins_71 &lt;= penguins_71&nbsp; # True<\/code><\/div>\n<div class=\"line number17 index16 alt2\">&nbsp;<\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\"># Identity checking<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java plain\">penguins_87 is penguins_87&nbsp; # True<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java plain\">penguins_71 is penguins_87&nbsp; # False<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Web Code Geeks with permission by Jeremy Grifski, partner at our <a href=\"\/\/www.webcodegeeks.com\/join-us\/wcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">WCG program<\/a>. See the original article here: <a href=\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to Compare Strings in Python: Equality and Identity<\/a><\/p>\n<p>Opinions expressed by Web Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Once again, we\u2019re back with another Python topic. Today, we\u2019ll talk about how to compare strings in Python. Typically, I try to stay away from strings because they have a lot of complexity (e.g. different languages, implementations, etc.). That said, I decided to take a risk with this one. Hope you like it! As a &hellip;<\/p>\n","protected":false},"author":14722,"featured_media":1651,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-25066","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-25T10:15:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-23T11:55:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Grifski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@RenegadeCoder94\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Grifski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/\"},\"author\":{\"name\":\"Jeremy Grifski\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/7eaa8e89cf23a5de82a048beb4c59aa1\"},\"headline\":\"How to Compare Strings in Python: Equality and Identity\",\"datePublished\":\"2020-02-25T10:15:10+00:00\",\"dateModified\":\"2020-06-23T11:55:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/\"},\"wordCount\":1295,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"articleSection\":[\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/\",\"url\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/\",\"name\":\"How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"datePublished\":\"2020-02-25T10:15:10+00:00\",\"dateModified\":\"2020-06-23T11:55:45+00:00\",\"description\":\"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.\",\"breadcrumb\":{\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Compare Strings in Python: Equality and Identity\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/7eaa8e89cf23a5de82a048beb4c59aa1\",\"name\":\"Jeremy Grifski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9d50311a27dff0a54d775b6106b8f804d5d11d0b5182ed537f325046a020c6f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9d50311a27dff0a54d775b6106b8f804d5d11d0b5182ed537f325046a020c6f5?s=96&d=mm&r=g\",\"caption\":\"Jeremy Grifski\"},\"description\":\"Jeremy is the founder of The Renegade Coder, a software curriculum website launched in 2017. In addition, he is a PhD student with an interest in education and data visualization.\",\"sameAs\":[\"https:\/\/therenegadecoder.com\/\",\"https:\/\/www.linkedin.com\/in\/jeremy-grifski-22240552\/\",\"https:\/\/x.com\/RenegadeCoder94\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/jeremy-grifski\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026","description":"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/","og_locale":"en_US","og_type":"article","og_title":"How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026","og_description":"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.","og_url":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2020-02-25T10:15:10+00:00","article_modified_time":"2020-06-23T11:55:45+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","type":"image\/jpeg"}],"author":"Jeremy Grifski","twitter_card":"summary_large_image","twitter_creator":"@RenegadeCoder94","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Jeremy Grifski","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/"},"author":{"name":"Jeremy Grifski","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/7eaa8e89cf23a5de82a048beb4c59aa1"},"headline":"How to Compare Strings in Python: Equality and Identity","datePublished":"2020-02-25T10:15:10+00:00","dateModified":"2020-06-23T11:55:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/"},"wordCount":1295,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","articleSection":["Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/python\/how-to-compare-strings-in-python-equality-and-identity\/","url":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/","name":"How to Compare Strings in Python: Equality and Identity - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage"},"image":{"@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","datePublished":"2020-02-25T10:15:10+00:00","dateModified":"2020-06-23T11:55:45+00:00","description":"Interested to learn about Compare Strings? Check our article explaining how to Compare Strings in Python with examples.","breadcrumb":{"@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/therenegadecoder.com\/code\/how-to-compare-strings-in-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/www.webcodegeeks.com\/category\/python\/"},{"@type":"ListItem","position":3,"name":"How to Compare Strings in Python: Equality and Identity"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/7eaa8e89cf23a5de82a048beb4c59aa1","name":"Jeremy Grifski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9d50311a27dff0a54d775b6106b8f804d5d11d0b5182ed537f325046a020c6f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9d50311a27dff0a54d775b6106b8f804d5d11d0b5182ed537f325046a020c6f5?s=96&d=mm&r=g","caption":"Jeremy Grifski"},"description":"Jeremy is the founder of The Renegade Coder, a software curriculum website launched in 2017. In addition, he is a PhD student with an interest in education and data visualization.","sameAs":["https:\/\/therenegadecoder.com\/","https:\/\/www.linkedin.com\/in\/jeremy-grifski-22240552\/","https:\/\/x.com\/RenegadeCoder94"],"url":"https:\/\/www.webcodegeeks.com\/author\/jeremy-grifski\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/25066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/14722"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=25066"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/25066\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/1651"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=25066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=25066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=25066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}